@mateosuarezdev/brpc 1.0.56 → 1.0.57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +0 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import{z as U}from"zod";class b{middlewares=[];constructor($=[]){this.middlewares=$}use($){return new b([...this.middlewares,$])}input($){return new O(this.middlewares,$)}query($){return{_input:U.object({}),_output:null,_ctx:null,_type:"query",handler:$,middlewares:this.middlewares}}mutation($){return{_input:U.object({}),_output:null,_ctx:null,_type:"mutation",handler:$,middlewares:this.middlewares}}formMutation($){return{_input:U.object({}),_output:null,_ctx:null,_type:"formMutation",handler:$,middlewares:this.middlewares}}subscription($){return{_input:U.object({}),_output:null,_ctx:null,_type:"subscription",handler:$,middlewares:this.middlewares}}file($){return{_input:U.object({}),_output:null,_ctx:null,_type:"file",handler:$,middlewares:this.middlewares}}fileStream($){return{_input:U.object({}),_output:null,_ctx:null,_type:"fileStream",handler:$,middlewares:this.middlewares}}html($){return{_input:U.object({}),_output:null,_ctx:null,_type:"html",handler:$,middlewares:this.middlewares}}}class O{middlewares;inputSchema;timeoutMs;constructor($,F,J){this.middlewares=$;this.inputSchema=F;this.timeoutMs=J}timeout($){return new O(this.middlewares,this.inputSchema,$)}query($){return{_input:this.inputSchema,_output:null,_ctx:null,_type:"query",_timeout:this.timeoutMs,handler:$,middlewares:this.middlewares}}mutation($){return{_input:this.inputSchema,_output:null,_ctx:null,_type:"mutation",_timeout:this.timeoutMs,handler:$,middlewares:this.middlewares}}formMutation($){return{_input:this.inputSchema,_output:null,_ctx:null,_type:"formMutation",_timeout:this.timeoutMs,handler:$,middlewares:this.middlewares}}subscription($){return{_input:this.inputSchema,_output:null,_ctx:null,_type:"subscription",_timeout:this.timeoutMs,handler:$,middlewares:this.middlewares}}file($){return{_input:this.inputSchema,_output:null,_ctx:null,_type:"file",_timeout:this.timeoutMs,handler:$,middlewares:this.middlewares}}fileStream($){return{_input:this.inputSchema,_output:null,_ctx:null,_type:"fileStream",_timeout:this.timeoutMs,handler:$,middlewares:this.middlewares}}html($){return{_input:U.object({}),_output:null,_ctx:null,_type:"html",_timeout:this.timeoutMs,handler:$,middlewares:this.middlewares}}}function g($){return new b}import{ZodError as y}from"zod";class I extends Error{code;clientCode;httpStatus;data;cause;static STATUS_MAP={BAD_REQUEST:400,UNAUTHORIZED:401,FORBIDDEN:403,NOT_FOUND:404,METHOD_NOT_SUPPORTED:405,TIMEOUT:408,CONFLICT:409,PRECONDITION_FAILED:412,PAYLOAD_TOO_LARGE:413,UNPROCESSABLE_CONTENT:422,TOO_MANY_REQUESTS:429,CLIENT_CLOSED_REQUEST:499,INTERNAL_SERVER_ERROR:500,NOT_IMPLEMENTED:501,BAD_GATEWAY:502,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504};constructor($){super($.message);if(this.name="BRPCError",this.code=$.code,this.clientCode=$.clientCode,this.httpStatus=I.STATUS_MAP[$.code],this.data=$.data,this.cause=$.cause,Error.captureStackTrace)Error.captureStackTrace(this,I)}toJSON(){return{name:this.name,code:this.code,clientCode:this.clientCode,message:this.message,data:this.data,httpStatus:this.httpStatus}}static badRequest($,F,J){return new I({code:"BAD_REQUEST",message:$,clientCode:F,data:J})}static unauthorized($="Unauthorized",F,J){return new I({code:"UNAUTHORIZED",message:$,clientCode:F,data:J})}static forbidden($="Forbidden",F,J){return new I({code:"FORBIDDEN",message:$,clientCode:F,data:J})}static notFound($="Not Found",F,J){return new I({code:"NOT_FOUND",message:$,clientCode:F,data:J})}static preconditionFailed($="Precondition failed",F,J){return new I({code:"NOT_FOUND",message:$,clientCode:F,data:J})}static conflict($,F,J){return new I({code:"CONFLICT",message:$,clientCode:F,data:J})}static unprocessableContent($,F,J){return new I({code:"UNPROCESSABLE_CONTENT",message:$,clientCode:F,data:J})}static tooManyRequests($="Too many requests",F,J){return new I({code:"TOO_MANY_REQUESTS",message:$,clientCode:F,data:J})}static internalServerError($="Internal Server Error",F,J){return new I({code:"INTERNAL_SERVER_ERROR",message:$,clientCode:F,data:J})}static timeout($="Request timeout",F,J){return new I({code:"TIMEOUT",message:$,clientCode:F,data:J})}}class Q{routeTree;routeCache;options;routeStats;constructor($,F={}){if(this.options={enableCaching:!0,maxCacheSize:1000,debug:!1,...F},this.routeCache=new Map,this.routeStats=this.analyzeRoutes($),this.routeTree=this.compileRoutes($),this.options.debug)console.log("[ROUTEMATCHER]","initialized with stats:",this.routeStats)}match($){if(this.options.enableCaching)return this.matchWithCache($);return this.matchDirect($)}matchWithCache($){let F=$.join("/");if(this.routeCache.has(F)){let _=this.routeCache.get(F);if(this.options.debug&&_)console.log("[ROUTEMATCHER]",`\uD83C\uDFAF Cache hit for route: /${F}`);return _}let J=this.matchDirect($);if(this.cacheResult(F,J),this.options.debug)console.log("[ROUTEMATCHER]",`\uD83D\uDCBE Cached route: /${F} -> ${J?"found":"not found"}`);return J}matchDirect($){let F=this.options.debug?performance.now():0,J=this.traverseTree(this.routeTree,$,0,{});if(this.options.debug){let _=performance.now()-F,W=J?.route._type||"none";console.log("[ROUTEMATCHER]",`\u26A1 Route match: /${$.join("/")} (${W}) took ${_.toFixed(3)}ms`)}return J}traverseTree($,F,J,_){if(J>=F.length){if($.handler)return{params:_,route:$.handler.handler};if($.index)return{params:_,route:$.index.handler};//! This was the last change I made trying to fix
|
|
3
3
|
//! Wildacrd not matching root (/) when index wasn't defined
|
|
4
|
-
if($.wildcard&&F.length===0)return{params:{..._,wildcardPath:""},route:$.wildcard.handler};return null}let W=F[J],X=decodeURIComponent(W),Y=$.static.get(X);if(Y){let j=this.traverseTree(Y,F,J+1,_);if(j)return j}if($.param){let j={..._,[$.param.name]:X},Z=this.traverseTree($.param.node,F,J+1,j);if(Z)return Z}if($.wildcard){let j=F.slice(J).join("/");return{params:{..._,wildcardPath:j},route:$.wildcard.handler}}return null}compileRoutes($,F=[]){let J={static:new Map};for(let[_,W]of Object.entries($)){if(_==="index"&&this.isProcedure(W)){J.index={handler:W,paramNames:[...F],hasWildcard:!1};continue}if(_==="*"){if(this.isProcedure(W))J.wildcard={handler:W,paramNames:[...F,"wildcardPath"],hasWildcard:!0,wildcardIndex:F.length};continue}if(this.isProcedure(W)){let X={handler:W,paramNames:[...F],hasWildcard:!1};if(_.startsWith(":")){let Y=_.slice(1),j={static:new Map,handler:X};J.param={name:Y,node:j}}else{let Y={static:new Map,handler:X};J.static.set(_,Y)}}else if(typeof W==="object"&&W!==null)if(_.startsWith(":")){let X=_.slice(1),Y=this.compileRoutes(W,[...F,X]);J.param={name:X,node:Y}}else{let X=this.compileRoutes(W,F);J.static.set(_,X)}}return J}isProcedure($){return $&&typeof $==="object"&&"_type"in $&&"_input"in $}cacheResult($,F){if(this.routeCache.size>=this.options.maxCacheSize){let J=this.routeCache.keys().next().value;if(J!==void 0){if(this.routeCache.delete(J),this.options.debug)console.log(`\uD83D\uDDD1\uFE0F Evicted oldest cache entry: ${J}`)}}this.routeCache.set($,F)}analyzeRoutes($){let F={totalRoutes:0,staticRoutes:0,paramRoutes:0,wildcardRoutes:0,indexRoutes:0,maxDepth:0,procedureTypes:{query:0,mutation:0,subscription:0,file:0,fileStream:0,streamQuery:0,streamMutation:0,formMutation:0,html:0}},J=(_,W=0)=>{F.maxDepth=Math.max(F.maxDepth,W);for(let[X,Y]of Object.entries(_))if(this.isProcedure(Y)){if(F.totalRoutes++,Y._type in F.procedureTypes)F.procedureTypes[Y._type]++;if(X==="index")F.indexRoutes++;else if(X.startsWith(":"))F.paramRoutes++;else if(X==="*")F.wildcardRoutes++;else F.staticRoutes++}else if(typeof Y==="object"&&Y!==null)J(Y,W+1)};return J($),F}clearCache(){if(this.routeCache.clear(),this.options.debug)console.log("[ROUTEMATCHER]","\uD83E\uDDF9 Route cache cleared")}getCacheStats(){return{size:this.routeCache.size,maxSize:this.options.maxCacheSize,routeStats:this.routeStats}}getOptimizationSuggestions(){let $=[],{routeStats:F}=this;if(F.paramRoutes>F.staticRoutes*2)$.push("\uD83D\uDE80 Consider grouping routes to reduce parameter route overhead");if(F.maxDepth>6)$.push("\uD83D\uDCCA Deep route nesting detected - consider flattening some routes");if(F.totalRoutes>200)$.push("\u26A1 Large route table - consider route splitting or lazy loading");if(!this.options.enableCaching&&F.totalRoutes>50)$.push("\uD83D\uDCBE Enable caching for better performance with many routes");if(F.procedureTypes.file>20)$.push("\uD83D\uDCC1 Many file routes detected - consider static file serving");if(F.procedureTypes.subscription>10)$.push("\uD83D\uDD04 Many subscription routes - ensure WebSocket optimization");return $}findRoutesByPattern($){return[]}getRouteInfo($){let F=$.split("/").filter(Boolean),J=F.join("/"),_=this.routeCache.has(J),W=performance.now(),X=this.matchDirect(F),Y=performance.now()-W;return{found:!!X,route:X?.route,params:X?.params,cached:_,matchTime:Y}}benchmark($,F=1000){let J=$.map((G)=>G.split("/").filter(Boolean)),_=new Map(this.routeCache);this.routeCache.clear();let W=performance.now();for(let G=0;G<F;G++)for(let D of J)this.matchDirect(D);let Y=performance.now()-W,j=F*$.length,Z=Y/j,L=j/Y*1000;return this.routeCache=_,{averageTime:Z,totalTime:Y,routesPerSecond:L}}warmupCache($){if(!this.options.enableCaching)return;let F=performance.now(),J=0;for(let W of $){let X=W.split("/").filter(Boolean),Y=this.matchDirect(X);if(Y)this.cacheResult(X.join("/"),Y),J++}let _=performance.now();if(this.options.debug)console.log("[ROUTEMATCHER]",`\uD83D\uDD25 Cache warmed up: ${J} routes in ${(_-F).toFixed(2)}ms`)}}var C=import.meta.require,x={NO_CACHE:{cacheControl:"no-cache, no-store, must-revalidate",expires:new Date(0).toUTCString()},ONE_YEAR:{cacheControl:"public, max-age=31536000",expires:new Date(Date.now()+31536000000).toUTCString()},IMMUTABLE:{cacheControl:"public, max-age=31536000, immutable",expires:new Date(Date.now()+31536000000).toUTCString()},ONE_MONTH:{cacheControl:"public, max-age=2592000"},ONE_WEEK:{cacheControl:"public, max-age=604800"},ONE_DAY:{cacheControl:"public, max-age=86400, must-revalidate"},ONE_HOUR:{cacheControl:"public, max-age=3600, must-revalidate"},FIVE_MINUTES:{cacheControl:"public, max-age=300"},API:{cacheControl:"public, max-age=300, s-maxage=3600"},STYLESHEET:{cacheControl:"public, max-age=2592000, must-revalidate"},JAVASCRIPT:{cacheControl:"public, max-age=2592000, must-revalidate"},HASHED_ASSET:{cacheControl:"public, max-age=31536000, immutable",expires:new Date(Date.now()+31536000000).toUTCString()},FONT:{cacheControl:"public, max-age=31536000",expires:new Date(Date.now()+31536000000).toUTCString()},IMAGE:{cacheControl:"public, max-age=2592000"},FAVICON:{cacheControl:"public, max-age=31536000",expires:new Date(Date.now()+31536000000).toUTCString()},HTML_PAGE:{cacheControl:"public, max-age=3600, must-revalidate"},API_RESPONSE:{cacheControl:"public, max-age=300, s-maxage=900"},FEED:{cacheControl:"public, max-age=3600"},SITEMAP:{cacheControl:"public, max-age=86400"},MANIFEST:{cacheControl:"public, max-age=86400, must-revalidate"},SERVICE_WORKER:{cacheControl:"no-cache, no-store, must-revalidate",expires:new Date(0).toUTCString()},MEDIA_STREAM:{cacheControl:"no-cache, no-store"},DOCUMENT:{cacheControl:"public, max-age=86400"},ARCHIVE:{cacheControl:"public, max-age=604800"}};function q($){return x[$]}var v={html:"text/html; charset=utf-8",css:"text/css",javascript:"application/javascript",json:"application/json",xml:"application/xml",text:"text/plain; charset=utf-8",csv:"text/csv",markdown:"text/markdown; charset=utf-8",png:"image/png",jpeg:"image/jpeg",gif:"image/gif",svg:"image/svg+xml",webp:"image/webp",icon:"image/x-icon",bmp:"image/bmp",woff:"font/woff",woff2:"font/woff2",truetype:"font/ttf","embedded-opentype":"application/vnd.ms-fontobject",opentype:"font/otf",mp4:"video/mp4",webm:"video/webm",ogg:"video/ogg",mpeg:"audio/mpeg",wav:"audio/wav",flac:"audio/flac",pdf:"application/pdf",doc:"application/msword",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",zip:"application/zip",tar:"application/x-tar",gzip:"application/gzip","7z":"application/x-7z-compressed",js:"application/javascript",txt:"text/plain; charset=utf-8",jpg:"image/jpeg",ico:"image/x-icon",ttf:"font/ttf",eot:"application/vnd.ms-fontobject",otf:"font/otf",mp3:"audio/mpeg",gz:"application/gzip"};function S($){return v[$]||"application/octet-stream"}function f($){if(typeof Bun<"u"&&Bun.hash)return Bun.hash($).toString(16);try{let F=C("crypto"),J;if(typeof $==="string")J=Buffer.from($);else if($ instanceof ArrayBuffer)J=Buffer.from(new Uint8Array($));else J=Buffer.from($);return F.createHash("md5").update(J).digest("hex")}catch{let F=typeof $==="string"?new TextEncoder().encode($):$ instanceof ArrayBuffer?new Uint8Array($):$,J=0;for(let _=0;_<F.length;_++)J=(J<<5)-J+F[_],J=J&J;return Math.abs(J).toString(16).padStart(16,"0")}}function V($,F,J){let _=$.headers.get("Origin"),W=!0;if((J?.allowAll??!0)&&_)return _;if(F.length===0)return _||"*";if(!_)return F[0];if(F.includes(_))return _;return F[0]}class B{headers={};contentType($){return this.headers["Content-Type"]=S($),this}filePath($){let F=$.split(".").pop()?.toLowerCase()||"";return this.headers["Content-Type"]=S(F),this}mimeType($){return this.headers["Content-Type"]=$,this}cache($){let{cacheControl:F,expires:J}=q($);if(this.headers["Cache-Control"]=F,J)this.headers.Expires=J;return this}eTag($){if(!$)return this;let F;if(typeof $==="string"&&$.startsWith('"'))F=$;else F=`"${f($)}"`;return this.headers.ETag=F,this}lastModified($){return this.headers["Last-Modified"]=$.toUTCString(),this}contentLength($){return this.headers["Content-Length"]=$.toString(),this}redirect($,F=!1){return this.headers.Location=$,this.headers["X-Redirect-Type"]=F?"permanent":"temporary",this}cors({origin:$="*",methods:F=["GET","POST","PUT","DELETE","OPTIONS"],headers:J=["Content-Type","Authorization"],maxAge:_=86400,credentials:W}={}){let X=W??$!=="*";if(X&&$==="*")throw Error('CORS: Cannot use credentials with wildcard origin "*". Specify an exact origin or set credentials to false.');if(this.headers["Access-Control-Allow-Origin"]=$,this.headers["Access-Control-Allow-Methods"]=F.join(", "),this.headers["Access-Control-Allow-Headers"]=J.join(", "),X)this.headers["Access-Control-Allow-Credentials"]="true";return this.headers["Access-Control-Max-Age"]=_.toString(),this}security($){let F={hsts:!0,noSniff:!0,frameOptions:"SAMEORIGIN",xssProtection:!0,...$};if(F.csp)this.headers["Content-Security-Policy"]=F.csp;if(F.hsts){let J=typeof F.hsts==="number"?F.hsts:31536000;this.headers["Strict-Transport-Security"]=`max-age=${J}; includeSubDomains`}if(F.noSniff)this.headers["X-Content-Type-Options"]="nosniff";if(F.frameOptions)this.headers["X-Frame-Options"]=F.frameOptions;if(F.xssProtection)this.headers["X-XSS-Protection"]="1; mode=block";return this}custom($,F){return this.headers[$]=F,this}customHeaders($){return Object.assign(this.headers,$),this}vary(...$){let F=this.headers.Vary,J=F?`${F}, ${$.join(", ")}`:$.join(", ");return this.headers.Vary=J,this}compress($){if($)this.headers["Content-Encoding"]=$;return this}build($){let F={...this.headers};if($&&!F["Content-Length"]){let J=typeof $==="string"?new TextEncoder().encode($).length:$.byteLength;F["Content-Length"]=J.toString()}return F}buildHeaders($){return new Headers(this.build($))}}function A(){return new B}function l($,F){let J=A().contentType($);if(F)J.cache(F);return J.build()}var c={css:($)=>A().contentType("css").cache("STYLESHEET").eTag($),javascript:($)=>A().contentType("javascript").cache("JAVASCRIPT").eTag($),hashedAsset:($,F)=>A().filePath($).cache("HASHED_ASSET").eTag(F),font:($)=>A().filePath($).cache("FONT").cors({origin:"*"}),image:($)=>A().filePath($).cache("IMAGE"),favicon:()=>A().contentType("icon").cache("FAVICON"),api:()=>A().contentType("json").cache("API_RESPONSE").cors(),expensiveApi:($)=>A().contentType("json").cache("API_RESPONSE").cors().eTag($),realtime:()=>A().contentType("json").cache("NO_CACHE").cors(),html:()=>A().contentType("html").cache("HTML_PAGE").security(),expensiveHtml:($)=>A().contentType("html").cache("HTML_PAGE").security().eTag($),manifest:($)=>A().contentType("json").cache("MANIFEST").eTag($),serviceWorker:()=>A().contentType("javascript").cache("SERVICE_WORKER"),sitemap:($)=>A().contentType("xml").cache("SITEMAP").eTag($),feed:($,F="rss")=>A().contentType("xml").cache("FEED").eTag($).mimeType(F==="rss"?"application/rss+xml":"application/atom+xml"),video:($)=>A().filePath($).cache("MEDIA_STREAM").custom("Accept-Ranges","bytes"),audio:($)=>A().filePath($).cache("MEDIA_STREAM").custom("Accept-Ranges","bytes"),pdf:($)=>A().contentType("pdf").cache("DOCUMENT").custom("Content-Disposition","inline").eTag($),download:($,F,J)=>A().filePath(F).cache("ARCHIVE").custom("Content-Disposition",`attachment; filename="${$}"`).eTag(J),secure:()=>A().security({csp:"default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'",hsts:31536000}).custom("X-Powered-By","Bun"),permanentRedirect:($)=>A().redirect($,!0),temporaryRedirect:($)=>A().redirect($,!1)};async function T($,F,J,_={}){let{maxChunkSize:W=2097152,cacheMaxAge:X=3600,acceptedExtensions:Y}=_;if(!await $.exists())return new Response("Media file not found",{status:404,headers:A().contentType("text").cors({origin:V(F,J)}).build()});if(Y&&Y.length>0){let K=$.name?.toLowerCase().split(".").pop();if(!K||!Y.includes(K))return new Response("File type not supported",{status:415,headers:A().contentType("text").cors({origin:V(F,J)}).build()})}let Z=$.size,L=F.headers.get("Range");if(!L)return new Response($,{headers:A().filePath($.name||"media").custom("Accept-Ranges","bytes").custom("Cache-Control",`public, max-age=${X}`).cors({origin:V(F,J)}).build()});let G=L.match(/bytes=(\d*)-(\d*)/);if(!G)return new Response("Invalid Range header",{status:416,headers:A().contentType("text").cors({origin:V(F,J)}).custom("Content-Range",`bytes */${Z}`).build()});let D=G[1]?parseInt(G[1]):0,N=G[2]?parseInt(G[2]):Z-1,M=Math.min(N,D+W-1,Z-1);if(D>=Z||M>=Z||D>M)return new Response("Range not satisfiable",{status:416,headers:A().contentType("text").cors({origin:V(F,J)}).custom("Content-Range",`bytes */${Z}`).build()});return new Response($.slice(D,M+1),{status:206,headers:A().filePath($.name||"media").custom("Accept-Ranges","bytes").custom("Cache-Control",`public, max-age=${X}`).cors({origin:V(F,J)}).build()})}function z($,F,J){return{type:"stream",file:$,request:F,options:J}}class E{routes;routeMatcher;contextCreator;prefix;globalMiddlewares;server=null;wsConfig;integrations;development=!0;debug=!1;allowedOrigins=[];onError;activeConnections=new Set;maxConnections=parseInt(process.env.MAX_WS_CONNECTIONS??"1000");connectionTimeout=parseInt(process.env.WS_TIMEOUT??"30000");maxRequestSize=parseInt(process.env.MAX_REQUEST_SIZE??"10485760");requestTimeout=parseInt(process.env.REQUEST_TIMEOUT??"30000");constructor($){if(this.contextCreator=$.context,this.prefix=$.prefix??"",this.routes=$.routes,this.globalMiddlewares=$.globalMiddlewares??[],this.wsConfig=$.websocket??{},this.integrations=$.integrations,this.debug=!!$.debug&&!0,this.onError=$.onError,this.routeMatcher=new Q($.routes,{enableCaching:!this.development,maxCacheSize:parseInt(process.env.ROUTE_CACHE_SIZE??"1000"),debug:this.debug}),!this.development)setInterval(()=>this.cleanupStaleConnections(),60000);if(this.debug)console.log("Router initialized with route matcher"),console.log("Route cache stats:",this.routeMatcher.getCacheStats())}findRoute($){return this.routeMatcher.match($)}async parseInput($,F,J){let _={},W=new URL($.url),X=Object.fromEntries(W.searchParams),Y=$.method;if(Y==="POST"){if(parseInt($.headers.get("content-length")||"0")>this.maxRequestSize)throw Error("Request payload too large")}if(Y==="GET"&&["query","streamQuery","file","fileStream","html"].includes(J))_=X;else if(Y==="POST"&&["mutation","formMutation","streamMutation"].includes(J)){let j=$.headers.get("content-type");if(j?.includes("application/json"))_=await $.json();else if(j?.includes("multipart/form-data")){let Z=await $.formData();_=await this.parseFormData(Z)}else throw Error("Unsupported content type")}else throw Error(`Unsupported request method ${Y} for procedure type ${J}`);return F.parse(_)}async parseFormData($){let F={},J={};$.forEach(async(_,W)=>{if(_ instanceof File){if(!J[W])J[W]=[];J[W].push(_)}else if(typeof _==="string")try{F[W]=JSON.parse(_)}catch{F[W]=_}});for(let[_,W]of Object.entries(J))F[_]=W;return F}handleError($,F){if(this.onError)try{this.onError($,{req:F,route:F.url})}catch(J){console.error("Error logger failed:",J)}if($?.errors&&Array.isArray($.errors)&&$.name==="ZodError")return new Response(JSON.stringify({error:{name:"ValidationError",code:"BAD_REQUEST",clientCode:"VALIDATION_ERROR",message:"Input validation failed",data:{validationErrors:$.errors.map((J)=>({path:J.path.join("."),message:J.message,code:J.code,received:J.received}))},httpStatus:400}}),{status:400,headers:A().contentType("json").cors({origin:V(F,this.allowedOrigins)}).build()});if($ instanceof I)return new Response(JSON.stringify({error:$.toJSON()}),{status:$.httpStatus,headers:A().contentType("json").cors({origin:V(F,this.allowedOrigins)}).build()});if($ instanceof Error){let J=$.message==="Not Found"?404:$.message==="Unauthorized"?401:$.message==="Forbidden"?403:$.message==="Request payload too large"?413:$.message==="Request timeout"?504:500,_=J===404?"NOT_FOUND":J===401?"UNAUTHORIZED":J===403?"FORBIDDEN":J===413?"PAYLOAD_TOO_LARGE":J===504?"GATEWAY_TIMEOUT":"INTERNAL_SERVER_ERROR",W=J<500?$.message:"Internal Server Error";return new Response(JSON.stringify({error:{code:_,message:W}}),{status:J,headers:A().contentType("json").cors({origin:V(F,this.allowedOrigins)}).build()})}return new Response(JSON.stringify({error:{code:"INTERNAL_SERVER_ERROR",message:"Internal Server Error"}}),{status:500,headers:A().contentType("json").cors({origin:V(F,this.allowedOrigins)}).build()})}handleFileCacheControl($){let F;if($?.includes("text/html"))F="public, max-age=0, must-revalidate";else if($?.includes("text/css")||$?.includes("text/javascript")||$?.includes("application/javascript"))F="public, max-age=31536000, immutable";else F="public, max-age=86400, stale-while-revalidate=604800";return F}async handleRequest($,F){try{if($.method==="OPTIONS")return new Response(null,{status:204,headers:A().cors({origin:V($,this.allowedOrigins)}).build()});let _=new URL($.url).pathname;if(_=_.startsWith(this.prefix)?_.slice(this.prefix.length):_,_=_.startsWith("/")?_:"/"+_,_==="/ws"&&F){if(this.debug)console.log("\uD83D\uDD0C WebSocket upgrade requested");return this.handleWebSocketUpgrade($,F)}let W=_==="/"?[]:_.split("/").filter(Boolean),X=this.findRoute(W);if(!X)return new Response("Not Found",{status:404,headers:A().contentType("text").cors({origin:V($,this.allowedOrigins)}).build()});let{route:Y}=X,j=Y._timeout??this.requestTimeout,Z=new Promise((L,G)=>{setTimeout(()=>G(Error("Request timeout")),j)});return await Promise.race([this._handleRequest($,F,X),Z])}catch(J){return this.handleError(J,$)}}async _handleRequest($,F,J){try{if(!J)return new Response("Not Found",{status:404,headers:A().contentType("text").cors({origin:V($,this.allowedOrigins)}).build()});let{params:_,route:W}=J;if(!W.handler)return new Response("Handler not implemented",{status:501,headers:A().contentType("text").cors({origin:V($,this.allowedOrigins)}).build()});let X=new Headers,Y=await this.contextCreator($);Object.assign(Y,{req:$,params:_,publishToProcedure:async(G,D,N)=>{await this.publishToProcedure(G,D,Y,N)},headers:X});for(let G of this.globalMiddlewares){let D=await G(Y);if(D!==null&&D!==void 0&&typeof D==="object")Object.assign(Y,D)}for(let G of W.middlewares){let D=await G(Y);if(D!==null&&D!==void 0&&typeof D==="object")Object.assign(Y,D)}let j=await this.parseInput($,W._input,W._type),Z=await W.handler({ctx:Y,input:j}),L=A().cors({origin:V($,this.allowedOrigins)}).build();return Object.keys(L).forEach((G)=>{X.set(G,L[G])}),await this.handleProcedureResponse(W._type,Z,X)}catch(_){return this.handleError(_,$)}}async testRequest($){return this.handleRequest($)}async handleProcedureResponse($,F,J){switch($){case"file":if(F instanceof Response)return F;let _=F.type;return J.append("Content-Type",_),J.append("Cache-Control",this.development?"public, max-age=0, must-revalidate":this.handleFileCacheControl(_)),new Response(F,{headers:J});case"fileStream":if(typeof F==="object"&&F!==null&&"type"in F&&F.type==="stream"){let X=F;return await T(F.file,F.request,this.allowedOrigins,X.options)}let W=F.type;return J.append("Content-Type",W),J.append("Cache-Control",this.development?"public, max-age=0, must-revalidate":this.handleFileCacheControl(W)),new Response(F,{headers:J});case"html":if(typeof F==="string")return J.append("Content-Type","text/html"),new Response(F,{headers:J});break;case"query":case"mutation":case"formMutation":case"streamQuery":case"streamMutation":case"subscription":default:return J.append("Content-Type","application/json"),new Response(JSON.stringify({data:F}),{headers:J})}return J.append("Content-Type","application/json"),new Response(JSON.stringify({data:F}),{headers:J})}cleanupStaleConnections(){let $=Date.now();for(let F of this.activeConnections)if($-F.data.lastActivity>this.connectionTimeout)F.close(),this.activeConnections.delete(F)}async handleWebSocketUpgrade($,F){if(this.activeConnections.size>=this.maxConnections)return new Response("Too many connections",{status:503});let J=await this.contextCreator($);Object.assign(J,{req:$});for(let W of this.globalMiddlewares){let X=await W(J);if(X!==null&&X!==void 0&&typeof X==="object")Object.assign(J,X)}if(F.upgrade($,{data:{ctx:J,topics:new Set,lastActivity:Date.now()}}))return new Response(null,{status:101});return new Response("WebSocket upgrade failed",{status:500})}async handleAuthenticate($,F,J){try{let _=F.startsWith("Bearer ")?F.substring(7):F;if($.data.ctx.authToken=_,$.send(JSON.stringify({type:"auth_success",message:"Authentication successful"})),this.debug)console.log("[BRPC]","WebSocket authenticated successfully")}catch(_){if($.send(JSON.stringify({type:"auth_error",error:_ instanceof Error?_.message:"Authentication failed"})),this.debug)console.error("WebSocket authentication error:",_)}}async handleSubscribe($,F,J){let _=this.findRoute(F.split("/").filter(Boolean));if(!_||_.route._type!=="subscription")throw Error("Invalid subscription route");$.subscribe(F),$.data.topics.add(F)}async handleUnsubscribe($,F,J){let _=this.findRoute(F.split("/").filter(Boolean));if(!_||_.route._type!=="subscription")throw Error("Invalid subscription route");$.unsubscribe(F),$.data.topics.delete(F)}async handlePublish($,F,J,_){let W=this.findRoute(F.split("/").filter(Boolean));if(!W)throw Error("Subscription not found");let{params:X,route:Y}=W;if(Y._type!=="subscription"||!Y.handler)throw Error("Invalid subscription route");Object.assign(_,{params:X});let j=Y._input.fields?Y._input.parse(J):J,Z=await Y.handler({ctx:_,input:j}),L={topic:F,data:Z,type:"publish"};if(this.debug)console.log(`Server will publish to ${F}`,L);this.server.publish(F,JSON.stringify(L))}async publishToProcedure($,F,J,_){if($._type!=="subscription"||!$.handler)throw Error("Can only publish to subscription procedures");let W=this.findRoutePath(this.routes,$);if(!W)throw Error("Subscription route not found");let X=W.split("/").map((Z)=>{if(Z.startsWith(":")){let L=Z.slice(1),G=_[L];if(!G)throw Error(`Missing parameter: ${L}`);return G}return Z}).join("/"),Y=await $.handler({ctx:{...J,params:_},input:F}),j={topic:X,data:Y,type:"publish"};if(this.debug)console.log(`Server will publish to ${X}`,j);return this.server?.publish(X,JSON.stringify(j)),Y}async publish($,F,J){if($._type!=="subscription"||!$.handler)throw Error("Can only publish to subscription procedures");let _=this.findRoutePath(this.routes,$);if(!_)throw Error("Subscription route not found");let W=_.split("/").map((j)=>{if(j.startsWith(":")){let Z=j.slice(1),L=J?J[Z]:null;if(!L)throw Error(`Missing parameter: ${Z}`);return L}return j}).join("/"),X=await $.handler({ctx:{params:J},input:F}),Y={topic:W,data:X,type:"publish"};if(this.debug)console.log(`Server will publish to ${W}`,Y);return this.server?.publish(W,JSON.stringify(Y)),X}freePublish($,F){let J={topic:$,data:F,type:"publish"};this.server?.publish($,JSON.stringify(J))}findRoutePath($,F,J=""){for(let[_,W]of Object.entries($)){let X=J?`${J}/${_}`:_;if(W===F)return X;if(W&&typeof W==="object"&&!("_type"in W)){let Y=this.findRoutePath(W,F,X);if(Y)return Y}}return null}getIntegrationRoutes(){if(!this.integrations)return;let $={};if(this.integrations.betterAuth){let F=this.integrations.betterAuth.handler;if(!F)throw Error("Please provide a handler for betterAuth integration");$["/api/auth/*"]=async(J)=>{return await F(J)}}if(this.integrations.rawRoutes)Object.keys(this.integrations.rawRoutes).forEach((F)=>{$[F]=this.integrations.rawRoutes[F]});return Object.keys($).length>0?$:void 0}getRouteStats(){return{cache:this.routeMatcher.getCacheStats(),suggestions:this.routeMatcher.getOptimizationSuggestions()}}clearRouteCache(){if(this.routeMatcher.clearCache(),this.debug)console.log("[ROUTEMATCHER] Route cache cleared")}benchmarkRoutes($=["/users/123","/posts/456/comments"],F=1000){if(this.debug){let J=this.routeMatcher.benchmark($,F);return console.log("[ROUTEMATCHER]","Route matching benchmark:",J),J}}updateRoutes($){if(this.development)this.routes=$,this.routeMatcher=new Q($,{enableCaching:!1,debug:this.debug}),console.log("[HMR]","Server Routes updated");else console.warn("Route updates are only allowed in development mode")}listen($,F){if(this.server=Bun.serve({port:$,routes:this.getIntegrationRoutes(),fetch:(J,_)=>this.handleRequest(J,_),websocket:{open:(J)=>{if(this.activeConnections.add(J),this.wsConfig?.onOpen)this.wsConfig.onOpen(J,J.data.ctx);if(this.debug)console.log("[BRPC]","WebSocket connection opened",{connections:this.activeConnections.size})},message:async(J,_)=>{try{J.data.lastActivity=Date.now();let{type:W,topic:X,token:Y,data:j}=JSON.parse(_),Z=J.data.ctx;if(this.debug)console.log("[BRPC]","WebSocket message received:",{type:W,topic:X});switch(W){case"authenticate":await this.handleAuthenticate(J,Y,Z);break;case"subscribe":await this.handleSubscribe(J,X,Z);break;case"unsubscribe":await this.handleUnsubscribe(J,X,Z);break;case"publish":await this.handlePublish(J,X,j,Z);break;default:if(J.send(JSON.stringify({error:"Unknown message type"})),this.debug)console.error("Unknown WebSocket message type:",W)}}catch(W){if(this.debug)console.error("[BRPC]","WebSocket message error:",W);if(W instanceof y)J.send(JSON.stringify({error:"Invalid message format"}));else if(W instanceof Error)J.send(JSON.stringify({error:W.message}))}},close:(J,_,W)=>{if(this.activeConnections.delete(J),J.data.topics.forEach((X)=>{J.unsubscribe(X)}),this.debug)console.log("[BRPC]","WebSocket connection closed",{code:_,reason:W,remainingConnections:this.activeConnections.size});if(this.wsConfig?.onClose)this.wsConfig.onClose(J,_,W,J.data.ctx)}}}),F)F()}}function e($){return new E($)}function F$($){return $}import{z as P}from"zod";var w={image:["image/jpeg","image/png","image/gif","image/webp","image/svg+xml"],video:["video/mp4","video/webm","video/ogg"],audio:["audio/mpeg","audio/ogg","audio/wav"],document:["application/pdf","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"]},H=($,F="MB")=>{switch(F){case"MB":return $*1024*1024;case"KB":return $*1024;case"B":return $}},W$=({acceptedTypes:$,maxSize:F=1/0,minSize:J,messages:_={}}={})=>{let W=F?H(F):1/0,X=J?H(J):0,Y=$?Object.entries($).flatMap(([Z,L])=>{let G=Z;if(L==="*")return w[G];if(Array.isArray(L))return L;return[]}):void 0,j=P.instanceof(File,{message:_.required??"File is required"});if(j=j.refine((Z)=>Z.size<=W,_.maxSize??`File size must be less than ${F}MB`).refine((Z)=>Z.size>=X,_.minSize??`File size must be at least ${J}MB`),Y?.length)j=j.refine((Z)=>Y.includes(Z.type),_.type??`File must be of type: ${Y.join(", ")}`);return j};var Y$=($)=>{let F=$.paths.map((_)=>new RegExp(_)),J="Not Found";return async(_)=>{let X=new URL(_.req.url).pathname;if(F.some((Y)=>Y.test(X)))throw Error("Not Found")}};class R{requests=new Map;lastCleanupTime=Date.now();alertThreshold;config;constructor($){this.config={windowMs:$.windowMs,maxRequests:$.maxRequests,maxEntries:$.maxEntries??1e4,cleanupIntervalMs:$.cleanupIntervalMs??60000,message:$.message??"Too Many Requests",statusCode:$.statusCode??429,headerPrefix:$.headerPrefix??"X-RateLimit"},this.alertThreshold=this.config.maxEntries*0.8}cleanup(){let $=Date.now(),F=0;for(let[J,_]of this.requests.entries()){let W=$-_.startTime>this.config.windowMs,X=$-_.lastAccessed>this.config.windowMs*2;if(W||X)this.requests.delete(J),F++}return this.lastCleanupTime=$,F}handleMaxEntries($){let F=this.requests.size;if(Date.now()-this.lastCleanupTime>this.config.cleanupIntervalMs)this.cleanup();if(F>=this.alertThreshold)console.warn(`Rate limiter at ${Math.round(F/this.config.maxEntries*100)}% capacity`);if(this.requests.has($))return!0;return F<this.config.maxEntries}check($){if(!this.handleMaxEntries($))return{isLimited:!0,remaining:0,resetTime:Date.now()+this.config.windowMs};let F=Date.now(),J=this.requests.get($);if(!J||F-J.startTime>=this.config.windowMs)return this.requests.set($,{count:1,startTime:F,lastAccessed:F}),{isLimited:!1,remaining:this.config.maxRequests-1,resetTime:F+this.config.windowMs};J.lastAccessed=F;let _=J.count>=this.config.maxRequests;if(!_)J.count++;return{isLimited:_,remaining:Math.max(0,this.config.maxRequests-J.count),resetTime:J.startTime+this.config.windowMs}}getConfig(){return this.config}}var A$=($)=>{let F=new R($);return async(J)=>{if(J.req.headers.get("range"))return;let _=J.req.headers.get("x-forwarded-for")?.split(",")[0]||J.req.headers.get("x-real-ip")||"unknown",{isLimited:W,remaining:X,resetTime:Y}=F.check(_),{headerPrefix:j}=F.getConfig();if(J.headers.set(`${j}-Remaining`,X.toString()),J.headers.set(`${j}-Reset`,Y.toString()),W)throw J.headers.set(`${j}-Exceeded`,"true"),Error(F.getConfig().message)}};function G$($,F){return F??$}async function I$($,F){let J=performance.now();try{return await F()}catch(_){let W=performance.now();throw console.log(`[PERF] ${$} failed after ${(W-J).toFixed(4)} ms`),_}finally{let _=performance.now();console.log(`[PERF] ${$}: ${(_-J).toFixed(4)} ms`)}}export{z as streamMedia,l as quickHeaders,I$ as measure,f as hashContent,S as getMimeType,V as getCorsOrigin,e as createRouter,A$ as createRateLimiter,g as createProcedure,Y$ as createPathBlocker,G$ as createMiddleware,W$ as createFileSchema,F$ as createContext,c as commonHeaders,A as buildHeaders,E as Router,C$ as CacheService,I as BRPCError};
|
|
4
|
+
if($.wildcard&&F.length===0)return{params:{..._,wildcardPath:""},route:$.wildcard.handler};return null}let W=F[J],X=decodeURIComponent(W),Y=$.static.get(X);if(Y){let j=this.traverseTree(Y,F,J+1,_);if(j)return j}if($.param){let j={..._,[$.param.name]:X},Z=this.traverseTree($.param.node,F,J+1,j);if(Z)return Z}if($.wildcard){let j=F.slice(J).join("/");return{params:{..._,wildcardPath:j},route:$.wildcard.handler}}return null}compileRoutes($,F=[]){let J={static:new Map};for(let[_,W]of Object.entries($)){if(_==="index"&&this.isProcedure(W)){J.index={handler:W,paramNames:[...F],hasWildcard:!1};continue}if(_==="*"){if(this.isProcedure(W))J.wildcard={handler:W,paramNames:[...F,"wildcardPath"],hasWildcard:!0,wildcardIndex:F.length};continue}if(this.isProcedure(W)){let X={handler:W,paramNames:[...F],hasWildcard:!1};if(_.startsWith(":")){let Y=_.slice(1),j={static:new Map,handler:X};J.param={name:Y,node:j}}else{let Y={static:new Map,handler:X};J.static.set(_,Y)}}else if(typeof W==="object"&&W!==null)if(_.startsWith(":")){let X=_.slice(1),Y=this.compileRoutes(W,[...F,X]);J.param={name:X,node:Y}}else{let X=this.compileRoutes(W,F);J.static.set(_,X)}}return J}isProcedure($){return $&&typeof $==="object"&&"_type"in $&&"_input"in $}cacheResult($,F){if(this.routeCache.size>=this.options.maxCacheSize){let J=this.routeCache.keys().next().value;if(J!==void 0){if(this.routeCache.delete(J),this.options.debug)console.log(`\uD83D\uDDD1\uFE0F Evicted oldest cache entry: ${J}`)}}this.routeCache.set($,F)}analyzeRoutes($){let F={totalRoutes:0,staticRoutes:0,paramRoutes:0,wildcardRoutes:0,indexRoutes:0,maxDepth:0,procedureTypes:{query:0,mutation:0,subscription:0,file:0,fileStream:0,streamQuery:0,streamMutation:0,formMutation:0,html:0}},J=(_,W=0)=>{F.maxDepth=Math.max(F.maxDepth,W);for(let[X,Y]of Object.entries(_))if(this.isProcedure(Y)){if(F.totalRoutes++,Y._type in F.procedureTypes)F.procedureTypes[Y._type]++;if(X==="index")F.indexRoutes++;else if(X.startsWith(":"))F.paramRoutes++;else if(X==="*")F.wildcardRoutes++;else F.staticRoutes++}else if(typeof Y==="object"&&Y!==null)J(Y,W+1)};return J($),F}clearCache(){if(this.routeCache.clear(),this.options.debug)console.log("[ROUTEMATCHER]","\uD83E\uDDF9 Route cache cleared")}getCacheStats(){return{size:this.routeCache.size,maxSize:this.options.maxCacheSize,routeStats:this.routeStats}}getOptimizationSuggestions(){let $=[],{routeStats:F}=this;if(F.paramRoutes>F.staticRoutes*2)$.push("\uD83D\uDE80 Consider grouping routes to reduce parameter route overhead");if(F.maxDepth>6)$.push("\uD83D\uDCCA Deep route nesting detected - consider flattening some routes");if(F.totalRoutes>200)$.push("\u26A1 Large route table - consider route splitting or lazy loading");if(!this.options.enableCaching&&F.totalRoutes>50)$.push("\uD83D\uDCBE Enable caching for better performance with many routes");if(F.procedureTypes.file>20)$.push("\uD83D\uDCC1 Many file routes detected - consider static file serving");if(F.procedureTypes.subscription>10)$.push("\uD83D\uDD04 Many subscription routes - ensure WebSocket optimization");return $}findRoutesByPattern($){return[]}getRouteInfo($){let F=$.split("/").filter(Boolean),J=F.join("/"),_=this.routeCache.has(J),W=performance.now(),X=this.matchDirect(F),Y=performance.now()-W;return{found:!!X,route:X?.route,params:X?.params,cached:_,matchTime:Y}}benchmark($,F=1000){let J=$.map((G)=>G.split("/").filter(Boolean)),_=new Map(this.routeCache);this.routeCache.clear();let W=performance.now();for(let G=0;G<F;G++)for(let D of J)this.matchDirect(D);let Y=performance.now()-W,j=F*$.length,Z=Y/j,L=j/Y*1000;return this.routeCache=_,{averageTime:Z,totalTime:Y,routesPerSecond:L}}warmupCache($){if(!this.options.enableCaching)return;let F=performance.now(),J=0;for(let W of $){let X=W.split("/").filter(Boolean),Y=this.matchDirect(X);if(Y)this.cacheResult(X.join("/"),Y),J++}let _=performance.now();if(this.options.debug)console.log("[ROUTEMATCHER]",`\uD83D\uDD25 Cache warmed up: ${J} routes in ${(_-F).toFixed(2)}ms`)}}var C=import.meta.require,x={NO_CACHE:{cacheControl:"no-cache, no-store, must-revalidate",expires:new Date(0).toUTCString()},ONE_YEAR:{cacheControl:"public, max-age=31536000",expires:new Date(Date.now()+31536000000).toUTCString()},IMMUTABLE:{cacheControl:"public, max-age=31536000, immutable",expires:new Date(Date.now()+31536000000).toUTCString()},ONE_MONTH:{cacheControl:"public, max-age=2592000"},ONE_WEEK:{cacheControl:"public, max-age=604800"},ONE_DAY:{cacheControl:"public, max-age=86400, must-revalidate"},ONE_HOUR:{cacheControl:"public, max-age=3600, must-revalidate"},FIVE_MINUTES:{cacheControl:"public, max-age=300"},API:{cacheControl:"public, max-age=300, s-maxage=3600"},STYLESHEET:{cacheControl:"public, max-age=2592000, must-revalidate"},JAVASCRIPT:{cacheControl:"public, max-age=2592000, must-revalidate"},HASHED_ASSET:{cacheControl:"public, max-age=31536000, immutable",expires:new Date(Date.now()+31536000000).toUTCString()},FONT:{cacheControl:"public, max-age=31536000",expires:new Date(Date.now()+31536000000).toUTCString()},IMAGE:{cacheControl:"public, max-age=2592000"},FAVICON:{cacheControl:"public, max-age=31536000",expires:new Date(Date.now()+31536000000).toUTCString()},HTML_PAGE:{cacheControl:"public, max-age=3600, must-revalidate"},API_RESPONSE:{cacheControl:"public, max-age=300, s-maxage=900"},FEED:{cacheControl:"public, max-age=3600"},SITEMAP:{cacheControl:"public, max-age=86400"},MANIFEST:{cacheControl:"public, max-age=86400, must-revalidate"},SERVICE_WORKER:{cacheControl:"no-cache, no-store, must-revalidate",expires:new Date(0).toUTCString()},MEDIA_STREAM:{cacheControl:"no-cache, no-store"},DOCUMENT:{cacheControl:"public, max-age=86400"},ARCHIVE:{cacheControl:"public, max-age=604800"}};function q($){return x[$]}var v={html:"text/html; charset=utf-8",css:"text/css",javascript:"application/javascript",json:"application/json",xml:"application/xml",text:"text/plain; charset=utf-8",csv:"text/csv",markdown:"text/markdown; charset=utf-8",png:"image/png",jpeg:"image/jpeg",gif:"image/gif",svg:"image/svg+xml",webp:"image/webp",icon:"image/x-icon",bmp:"image/bmp",woff:"font/woff",woff2:"font/woff2",truetype:"font/ttf","embedded-opentype":"application/vnd.ms-fontobject",opentype:"font/otf",mp4:"video/mp4",webm:"video/webm",ogg:"video/ogg",mpeg:"audio/mpeg",wav:"audio/wav",flac:"audio/flac",pdf:"application/pdf",doc:"application/msword",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",zip:"application/zip",tar:"application/x-tar",gzip:"application/gzip","7z":"application/x-7z-compressed",js:"application/javascript",txt:"text/plain; charset=utf-8",jpg:"image/jpeg",ico:"image/x-icon",ttf:"font/ttf",eot:"application/vnd.ms-fontobject",otf:"font/otf",mp3:"audio/mpeg",gz:"application/gzip"};function B($){return v[$]||"application/octet-stream"}function z($){if(typeof Bun<"u"&&Bun.hash)return Bun.hash($).toString(16);try{let F=C("crypto"),J;if(typeof $==="string")J=Buffer.from($);else if($ instanceof ArrayBuffer)J=Buffer.from(new Uint8Array($));else J=Buffer.from($);return F.createHash("md5").update(J).digest("hex")}catch{let F=typeof $==="string"?new TextEncoder().encode($):$ instanceof ArrayBuffer?new Uint8Array($):$,J=0;for(let _=0;_<F.length;_++)J=(J<<5)-J+F[_],J=J&J;return Math.abs(J).toString(16).padStart(16,"0")}}function V($,F,J){let _=$.headers.get("Origin"),W=!0;if((J?.allowAll??!0)&&_)return _;if(F.length===0)return _||"*";if(!_)return F[0];if(F.includes(_))return _;return F[0]}class S{headers={};contentType($){return this.headers["Content-Type"]=B($),this}filePath($){let F=$.split(".").pop()?.toLowerCase()||"";return this.headers["Content-Type"]=B(F),this}mimeType($){return this.headers["Content-Type"]=$,this}cache($){let{cacheControl:F,expires:J}=q($);if(this.headers["Cache-Control"]=F,J)this.headers.Expires=J;return this}eTag($){if(!$)return this;let F;if(typeof $==="string"&&$.startsWith('"'))F=$;else F=`"${z($)}"`;return this.headers.ETag=F,this}lastModified($){return this.headers["Last-Modified"]=$.toUTCString(),this}contentLength($){return this.headers["Content-Length"]=$.toString(),this}redirect($,F=!1){return this.headers.Location=$,this.headers["X-Redirect-Type"]=F?"permanent":"temporary",this}cors({origin:$="*",methods:F=["GET","POST","PUT","DELETE","OPTIONS"],headers:J=["Content-Type","Authorization"],maxAge:_=86400,credentials:W}={}){let X=W??$!=="*";if(X&&$==="*")throw Error('CORS: Cannot use credentials with wildcard origin "*". Specify an exact origin or set credentials to false.');if(this.headers["Access-Control-Allow-Origin"]=$,this.headers["Access-Control-Allow-Methods"]=F.join(", "),this.headers["Access-Control-Allow-Headers"]=J.join(", "),X)this.headers["Access-Control-Allow-Credentials"]="true";return this.headers["Access-Control-Max-Age"]=_.toString(),this}security($){let F={hsts:!0,noSniff:!0,frameOptions:"SAMEORIGIN",xssProtection:!0,...$};if(F.csp)this.headers["Content-Security-Policy"]=F.csp;if(F.hsts){let J=typeof F.hsts==="number"?F.hsts:31536000;this.headers["Strict-Transport-Security"]=`max-age=${J}; includeSubDomains`}if(F.noSniff)this.headers["X-Content-Type-Options"]="nosniff";if(F.frameOptions)this.headers["X-Frame-Options"]=F.frameOptions;if(F.xssProtection)this.headers["X-XSS-Protection"]="1; mode=block";return this}custom($,F){return this.headers[$]=F,this}customHeaders($){return Object.assign(this.headers,$),this}vary(...$){let F=this.headers.Vary,J=F?`${F}, ${$.join(", ")}`:$.join(", ");return this.headers.Vary=J,this}compress($){if($)this.headers["Content-Encoding"]=$;return this}build($){let F={...this.headers};if($&&!F["Content-Length"]){let J=typeof $==="string"?new TextEncoder().encode($).length:$.byteLength;F["Content-Length"]=J.toString()}return F}buildHeaders($){return new Headers(this.build($))}}function A(){return new S}function l($,F){let J=A().contentType($);if(F)J.cache(F);return J.build()}var c={css:($)=>A().contentType("css").cache("STYLESHEET").eTag($),javascript:($)=>A().contentType("javascript").cache("JAVASCRIPT").eTag($),hashedAsset:($,F)=>A().filePath($).cache("HASHED_ASSET").eTag(F),font:($)=>A().filePath($).cache("FONT").cors({origin:"*"}),image:($)=>A().filePath($).cache("IMAGE"),favicon:()=>A().contentType("icon").cache("FAVICON"),api:()=>A().contentType("json").cache("API_RESPONSE").cors(),expensiveApi:($)=>A().contentType("json").cache("API_RESPONSE").cors().eTag($),realtime:()=>A().contentType("json").cache("NO_CACHE").cors(),html:()=>A().contentType("html").cache("HTML_PAGE").security(),expensiveHtml:($)=>A().contentType("html").cache("HTML_PAGE").security().eTag($),manifest:($)=>A().contentType("json").cache("MANIFEST").eTag($),serviceWorker:()=>A().contentType("javascript").cache("SERVICE_WORKER"),sitemap:($)=>A().contentType("xml").cache("SITEMAP").eTag($),feed:($,F="rss")=>A().contentType("xml").cache("FEED").eTag($).mimeType(F==="rss"?"application/rss+xml":"application/atom+xml"),video:($)=>A().filePath($).cache("MEDIA_STREAM").custom("Accept-Ranges","bytes"),audio:($)=>A().filePath($).cache("MEDIA_STREAM").custom("Accept-Ranges","bytes"),pdf:($)=>A().contentType("pdf").cache("DOCUMENT").custom("Content-Disposition","inline").eTag($),download:($,F,J)=>A().filePath(F).cache("ARCHIVE").custom("Content-Disposition",`attachment; filename="${$}"`).eTag(J),secure:()=>A().security({csp:"default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'",hsts:31536000}).custom("X-Powered-By","Bun"),permanentRedirect:($)=>A().redirect($,!0),temporaryRedirect:($)=>A().redirect($,!1)};async function T($,F,J,_={}){let{maxChunkSize:W=2097152,cacheMaxAge:X=3600,acceptedExtensions:Y}=_;if(!await $.exists())return new Response("Media file not found",{status:404,headers:A().contentType("text").cors({origin:V(F,J)}).build()});if(Y&&Y.length>0){let K=$.name?.toLowerCase().split(".").pop();if(!K||!Y.includes(K))return new Response("File type not supported",{status:415,headers:A().contentType("text").cors({origin:V(F,J)}).build()})}let Z=$.size,L=F.headers.get("Range");if(!L)return new Response($,{headers:A().filePath($.name||"media").custom("Accept-Ranges","bytes").custom("Cache-Control",`public, max-age=${X}`).cors({origin:V(F,J)}).build()});let G=L.match(/bytes=(\d*)-(\d*)/);if(!G)return new Response("Invalid Range header",{status:416,headers:A().contentType("text").cors({origin:V(F,J)}).custom("Content-Range",`bytes */${Z}`).build()});let D=G[1]?parseInt(G[1]):0,N=G[2]?parseInt(G[2]):Z-1,M=Math.min(N,D+W-1,Z-1);if(D>=Z||M>=Z||D>M)return new Response("Range not satisfiable",{status:416,headers:A().contentType("text").cors({origin:V(F,J)}).custom("Content-Range",`bytes */${Z}`).build()});return new Response($.slice(D,M+1),{status:206,headers:A().filePath($.name||"media").custom("Accept-Ranges","bytes").custom("Cache-Control",`public, max-age=${X}`).cors({origin:V(F,J)}).build()})}function f($,F,J){return{type:"stream",file:$,request:F,options:J}}class E{routes;routeMatcher;contextCreator;prefix;globalMiddlewares;server=null;wsConfig;integrations;development=!0;debug=!1;allowedOrigins=[];onError;activeConnections=new Set;maxConnections=parseInt(process.env.MAX_WS_CONNECTIONS??"1000");connectionTimeout=parseInt(process.env.WS_TIMEOUT??"30000");maxRequestSize=parseInt(process.env.MAX_REQUEST_SIZE??"10485760");requestTimeout=parseInt(process.env.REQUEST_TIMEOUT??"30000");constructor($){if(this.contextCreator=$.context,this.prefix=$.prefix??"",this.routes=$.routes,this.globalMiddlewares=$.globalMiddlewares??[],this.wsConfig=$.websocket??{},this.integrations=$.integrations,this.debug=!!$.debug&&!0,this.onError=$.onError,this.routeMatcher=new Q($.routes,{enableCaching:!this.development,maxCacheSize:parseInt(process.env.ROUTE_CACHE_SIZE??"1000"),debug:this.debug}),!this.development)setInterval(()=>this.cleanupStaleConnections(),60000);if(this.debug)console.log("Router initialized with route matcher"),console.log("Route cache stats:",this.routeMatcher.getCacheStats())}findRoute($){return this.routeMatcher.match($)}async parseInput($,F,J){let _={},W=new URL($.url),X=Object.fromEntries(W.searchParams),Y=$.method;if(Y==="POST"){if(parseInt($.headers.get("content-length")||"0")>this.maxRequestSize)throw Error("Request payload too large")}if(Y==="GET"&&["query","streamQuery","file","fileStream","html"].includes(J))_=X;else if(Y==="POST"&&["mutation","formMutation","streamMutation"].includes(J)){let j=$.headers.get("content-type");if(j?.includes("application/json"))_=await $.json();else if(j?.includes("multipart/form-data")){let Z=await $.formData();_=await this.parseFormData(Z)}else throw Error("Unsupported content type")}else throw Error(`Unsupported request method ${Y} for procedure type ${J}`);return F.parse(_)}async parseFormData($){let F={},J={};$.forEach(async(_,W)=>{if(_ instanceof File){if(!J[W])J[W]=[];J[W].push(_)}else if(typeof _==="string")try{F[W]=JSON.parse(_)}catch{F[W]=_}});for(let[_,W]of Object.entries(J))F[_]=W;return F}handleError($,F){if(this.onError)try{this.onError($,{req:F,route:F.url})}catch(J){console.error("Error logger failed:",J)}if($?.errors&&Array.isArray($.errors)&&$.name==="ZodError")return new Response(JSON.stringify({error:{name:"ValidationError",code:"BAD_REQUEST",clientCode:"VALIDATION_ERROR",message:"Input validation failed",data:{validationErrors:$.errors.map((J)=>({path:J.path.join("."),message:J.message,code:J.code,received:J.received}))},httpStatus:400}}),{status:400,headers:A().contentType("json").cors({origin:V(F,this.allowedOrigins)}).build()});if($ instanceof I)return new Response(JSON.stringify({error:$.toJSON()}),{status:$.httpStatus,headers:A().contentType("json").cors({origin:V(F,this.allowedOrigins)}).build()});if($ instanceof Error){let J=$.message==="Not Found"?404:$.message==="Unauthorized"?401:$.message==="Forbidden"?403:$.message==="Request payload too large"?413:$.message==="Request timeout"?504:500,_=J===404?"NOT_FOUND":J===401?"UNAUTHORIZED":J===403?"FORBIDDEN":J===413?"PAYLOAD_TOO_LARGE":J===504?"GATEWAY_TIMEOUT":"INTERNAL_SERVER_ERROR",W=J<500?$.message:"Internal Server Error";return new Response(JSON.stringify({error:{code:_,message:W}}),{status:J,headers:A().contentType("json").cors({origin:V(F,this.allowedOrigins)}).build()})}return new Response(JSON.stringify({error:{code:"INTERNAL_SERVER_ERROR",message:"Internal Server Error"}}),{status:500,headers:A().contentType("json").cors({origin:V(F,this.allowedOrigins)}).build()})}handleFileCacheControl($){let F;if($?.includes("text/html"))F="public, max-age=0, must-revalidate";else if($?.includes("text/css")||$?.includes("text/javascript")||$?.includes("application/javascript"))F="public, max-age=31536000, immutable";else F="public, max-age=86400, stale-while-revalidate=604800";return F}async handleRequest($,F){try{if($.method==="OPTIONS")return new Response(null,{status:204,headers:A().cors({origin:V($,this.allowedOrigins)}).build()});let _=new URL($.url).pathname;if(_=_.startsWith(this.prefix)?_.slice(this.prefix.length):_,_=_.startsWith("/")?_:"/"+_,_==="/ws"&&F){if(this.debug)console.log("\uD83D\uDD0C WebSocket upgrade requested");return this.handleWebSocketUpgrade($,F)}let W=_==="/"?[]:_.split("/").filter(Boolean),X=this.findRoute(W);if(!X)return new Response("Not Found",{status:404,headers:A().contentType("text").cors({origin:V($,this.allowedOrigins)}).build()});let{route:Y}=X,j=Y._timeout??this.requestTimeout,Z=new Promise((L,G)=>{setTimeout(()=>G(Error("Request timeout")),j)});return await Promise.race([this._handleRequest($,F,X),Z])}catch(J){return this.handleError(J,$)}}async _handleRequest($,F,J){try{if(!J)return new Response("Not Found",{status:404,headers:A().contentType("text").cors({origin:V($,this.allowedOrigins)}).build()});let{params:_,route:W}=J;if(!W.handler)return new Response("Handler not implemented",{status:501,headers:A().contentType("text").cors({origin:V($,this.allowedOrigins)}).build()});let X=new Headers,Y=await this.contextCreator($);Object.assign(Y,{req:$,params:_,publishToProcedure:async(G,D,N)=>{await this.publishToProcedure(G,D,Y,N)},headers:X});for(let G of this.globalMiddlewares){let D=await G(Y);if(D!==null&&D!==void 0&&typeof D==="object")Object.assign(Y,D)}for(let G of W.middlewares){let D=await G(Y);if(D!==null&&D!==void 0&&typeof D==="object")Object.assign(Y,D)}let j=await this.parseInput($,W._input,W._type),Z=await W.handler({ctx:Y,input:j}),L=A().cors({origin:V($,this.allowedOrigins)}).build();return Object.keys(L).forEach((G)=>{X.set(G,L[G])}),await this.handleProcedureResponse(W._type,Z,X)}catch(_){return this.handleError(_,$)}}async testRequest($){return this.handleRequest($)}async handleProcedureResponse($,F,J){switch($){case"file":if(F instanceof Response)return F;let _=F.type;return J.append("Content-Type",_),J.append("Cache-Control",this.development?"public, max-age=0, must-revalidate":this.handleFileCacheControl(_)),new Response(F,{headers:J});case"fileStream":if(typeof F==="object"&&F!==null&&"type"in F&&F.type==="stream"){let X=F;return await T(F.file,F.request,this.allowedOrigins,X.options)}let W=F.type;return J.append("Content-Type",W),J.append("Cache-Control",this.development?"public, max-age=0, must-revalidate":this.handleFileCacheControl(W)),new Response(F,{headers:J});case"html":if(typeof F==="string")return J.append("Content-Type","text/html"),new Response(F,{headers:J});break;case"query":case"mutation":case"formMutation":case"streamQuery":case"streamMutation":case"subscription":default:return J.append("Content-Type","application/json"),new Response(JSON.stringify({data:F}),{headers:J})}return J.append("Content-Type","application/json"),new Response(JSON.stringify({data:F}),{headers:J})}cleanupStaleConnections(){let $=Date.now();for(let F of this.activeConnections)if($-F.data.lastActivity>this.connectionTimeout)F.close(),this.activeConnections.delete(F)}async handleWebSocketUpgrade($,F){if(this.activeConnections.size>=this.maxConnections)return new Response("Too many connections",{status:503});let J=await this.contextCreator($);Object.assign(J,{req:$});for(let W of this.globalMiddlewares){let X=await W(J);if(X!==null&&X!==void 0&&typeof X==="object")Object.assign(J,X)}if(F.upgrade($,{data:{ctx:J,topics:new Set,lastActivity:Date.now()}}))return new Response(null,{status:101});return new Response("WebSocket upgrade failed",{status:500})}async handleAuthenticate($,F,J){try{let _=F.startsWith("Bearer ")?F.substring(7):F;if($.data.ctx.authToken=_,$.send(JSON.stringify({type:"auth_success",message:"Authentication successful"})),this.debug)console.log("[BRPC]","WebSocket authenticated successfully")}catch(_){if($.send(JSON.stringify({type:"auth_error",error:_ instanceof Error?_.message:"Authentication failed"})),this.debug)console.error("WebSocket authentication error:",_)}}async handleSubscribe($,F,J){let _=this.findRoute(F.split("/").filter(Boolean));if(!_||_.route._type!=="subscription")throw Error("Invalid subscription route");$.subscribe(F),$.data.topics.add(F)}async handleUnsubscribe($,F,J){let _=this.findRoute(F.split("/").filter(Boolean));if(!_||_.route._type!=="subscription")throw Error("Invalid subscription route");$.unsubscribe(F),$.data.topics.delete(F)}async handlePublish($,F,J,_){let W=this.findRoute(F.split("/").filter(Boolean));if(!W)throw Error("Subscription not found");let{params:X,route:Y}=W;if(Y._type!=="subscription"||!Y.handler)throw Error("Invalid subscription route");Object.assign(_,{params:X});let j=Y._input.fields?Y._input.parse(J):J,Z=await Y.handler({ctx:_,input:j}),L={topic:F,data:Z,type:"publish"};if(this.debug)console.log(`Server will publish to ${F}`,L);this.server.publish(F,JSON.stringify(L))}async publishToProcedure($,F,J,_){if($._type!=="subscription"||!$.handler)throw Error("Can only publish to subscription procedures");let W=this.findRoutePath(this.routes,$);if(!W)throw Error("Subscription route not found");let X=W.split("/").map((Z)=>{if(Z.startsWith(":")){let L=Z.slice(1),G=_[L];if(!G)throw Error(`Missing parameter: ${L}`);return G}return Z}).join("/"),Y=await $.handler({ctx:{...J,params:_},input:F}),j={topic:X,data:Y,type:"publish"};if(this.debug)console.log(`Server will publish to ${X}`,j);return this.server?.publish(X,JSON.stringify(j)),Y}async publish($,F,J){if($._type!=="subscription"||!$.handler)throw Error("Can only publish to subscription procedures");let _=this.findRoutePath(this.routes,$);if(!_)throw Error("Subscription route not found");let W=_.split("/").map((j)=>{if(j.startsWith(":")){let Z=j.slice(1),L=J?J[Z]:null;if(!L)throw Error(`Missing parameter: ${Z}`);return L}return j}).join("/"),X=await $.handler({ctx:{params:J},input:F}),Y={topic:W,data:X,type:"publish"};if(this.debug)console.log(`Server will publish to ${W}`,Y);return this.server?.publish(W,JSON.stringify(Y)),X}freePublish($,F){let J={topic:$,data:F,type:"publish"};this.server?.publish($,JSON.stringify(J))}findRoutePath($,F,J=""){for(let[_,W]of Object.entries($)){let X=J?`${J}/${_}`:_;if(W===F)return X;if(W&&typeof W==="object"&&!("_type"in W)){let Y=this.findRoutePath(W,F,X);if(Y)return Y}}return null}getIntegrationRoutes(){if(!this.integrations)return;let $={};if(this.integrations.betterAuth){let F=this.integrations.betterAuth.handler;if(!F)throw Error("Please provide a handler for betterAuth integration");$["/api/auth/*"]=async(J)=>{return await F(J)}}if(this.integrations.rawRoutes)Object.keys(this.integrations.rawRoutes).forEach((F)=>{$[F]=this.integrations.rawRoutes[F]});return Object.keys($).length>0?$:void 0}getRouteStats(){return{cache:this.routeMatcher.getCacheStats(),suggestions:this.routeMatcher.getOptimizationSuggestions()}}clearRouteCache(){if(this.routeMatcher.clearCache(),this.debug)console.log("[ROUTEMATCHER] Route cache cleared")}benchmarkRoutes($=["/users/123","/posts/456/comments"],F=1000){if(this.debug){let J=this.routeMatcher.benchmark($,F);return console.log("[ROUTEMATCHER]","Route matching benchmark:",J),J}}updateRoutes($){if(this.development)this.routes=$,this.routeMatcher=new Q($,{enableCaching:!1,debug:this.debug}),console.log("[HMR]","Server Routes updated");else console.warn("Route updates are only allowed in development mode")}listen($,F){if(this.server=Bun.serve({port:$,routes:this.getIntegrationRoutes(),fetch:(J,_)=>this.handleRequest(J,_),websocket:{open:(J)=>{if(this.activeConnections.add(J),this.wsConfig?.onOpen)this.wsConfig.onOpen(J,J.data.ctx);if(this.debug)console.log("[BRPC]","WebSocket connection opened",{connections:this.activeConnections.size})},message:async(J,_)=>{try{J.data.lastActivity=Date.now();let{type:W,topic:X,token:Y,data:j}=JSON.parse(_),Z=J.data.ctx;if(this.debug)console.log("[BRPC]","WebSocket message received:",{type:W,topic:X});switch(W){case"authenticate":await this.handleAuthenticate(J,Y,Z);break;case"subscribe":await this.handleSubscribe(J,X,Z);break;case"unsubscribe":await this.handleUnsubscribe(J,X,Z);break;case"publish":await this.handlePublish(J,X,j,Z);break;default:if(J.send(JSON.stringify({error:"Unknown message type"})),this.debug)console.error("Unknown WebSocket message type:",W)}}catch(W){if(this.debug)console.error("[BRPC]","WebSocket message error:",W);if(W instanceof y)J.send(JSON.stringify({error:"Invalid message format"}));else if(W instanceof Error)J.send(JSON.stringify({error:W.message}))}},close:(J,_,W)=>{if(this.activeConnections.delete(J),J.data.topics.forEach((X)=>{J.unsubscribe(X)}),this.debug)console.log("[BRPC]","WebSocket connection closed",{code:_,reason:W,remainingConnections:this.activeConnections.size});if(this.wsConfig?.onClose)this.wsConfig.onClose(J,_,W,J.data.ctx)}}}),F)F()}}function e($){return new E($)}function F$($){return $}import{z as P}from"zod";var w={image:["image/jpeg","image/png","image/gif","image/webp","image/svg+xml"],video:["video/mp4","video/webm","video/ogg"],audio:["audio/mpeg","audio/ogg","audio/wav"],document:["application/pdf","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"]},H=($,F="MB")=>{switch(F){case"MB":return $*1024*1024;case"KB":return $*1024;case"B":return $}},W$=({acceptedTypes:$,maxSize:F=1/0,minSize:J,messages:_={}}={})=>{let W=F?H(F):1/0,X=J?H(J):0,Y=$?Object.entries($).flatMap(([Z,L])=>{let G=Z;if(L==="*")return w[G];if(Array.isArray(L))return L;return[]}):void 0,j=P.instanceof(File,{message:_.required??"File is required"});if(j=j.refine((Z)=>Z.size<=W,_.maxSize??`File size must be less than ${F}MB`).refine((Z)=>Z.size>=X,_.minSize??`File size must be at least ${J}MB`),Y?.length)j=j.refine((Z)=>Y.includes(Z.type),_.type??`File must be of type: ${Y.join(", ")}`);return j};var Y$=($)=>{let F=$.paths.map((_)=>new RegExp(_)),J="Not Found";return async(_)=>{let X=new URL(_.req.url).pathname;if(F.some((Y)=>Y.test(X)))throw Error("Not Found")}};class R{requests=new Map;lastCleanupTime=Date.now();alertThreshold;config;constructor($){this.config={windowMs:$.windowMs,maxRequests:$.maxRequests,maxEntries:$.maxEntries??1e4,cleanupIntervalMs:$.cleanupIntervalMs??60000,message:$.message??"Too Many Requests",statusCode:$.statusCode??429,headerPrefix:$.headerPrefix??"X-RateLimit"},this.alertThreshold=this.config.maxEntries*0.8}cleanup(){let $=Date.now(),F=0;for(let[J,_]of this.requests.entries()){let W=$-_.startTime>this.config.windowMs,X=$-_.lastAccessed>this.config.windowMs*2;if(W||X)this.requests.delete(J),F++}return this.lastCleanupTime=$,F}handleMaxEntries($){let F=this.requests.size;if(Date.now()-this.lastCleanupTime>this.config.cleanupIntervalMs)this.cleanup();if(F>=this.alertThreshold)console.warn(`Rate limiter at ${Math.round(F/this.config.maxEntries*100)}% capacity`);if(this.requests.has($))return!0;return F<this.config.maxEntries}check($){if(!this.handleMaxEntries($))return{isLimited:!0,remaining:0,resetTime:Date.now()+this.config.windowMs};let F=Date.now(),J=this.requests.get($);if(!J||F-J.startTime>=this.config.windowMs)return this.requests.set($,{count:1,startTime:F,lastAccessed:F}),{isLimited:!1,remaining:this.config.maxRequests-1,resetTime:F+this.config.windowMs};J.lastAccessed=F;let _=J.count>=this.config.maxRequests;if(!_)J.count++;return{isLimited:_,remaining:Math.max(0,this.config.maxRequests-J.count),resetTime:J.startTime+this.config.windowMs}}getConfig(){return this.config}}var A$=($)=>{let F=new R($);return async(J)=>{if(J.req.headers.get("range"))return;let _=J.req.headers.get("x-forwarded-for")?.split(",")[0]||J.req.headers.get("x-real-ip")||"unknown",{isLimited:W,remaining:X,resetTime:Y}=F.check(_),{headerPrefix:j}=F.getConfig();if(J.headers.set(`${j}-Remaining`,X.toString()),J.headers.set(`${j}-Reset`,Y.toString()),W)throw J.headers.set(`${j}-Exceeded`,"true"),Error(F.getConfig().message)}};function G$($,F){return F??$}async function I$($,F){let J=performance.now();try{return await F()}catch(_){let W=performance.now();throw console.log(`[PERF] ${$} failed after ${(W-J).toFixed(4)} ms`),_}finally{let _=performance.now();console.log(`[PERF] ${$}: ${(_-J).toFixed(4)} ms`)}}export{f as streamMedia,l as quickHeaders,I$ as measure,z as hashContent,B as getMimeType,V as getCorsOrigin,e as createRouter,A$ as createRateLimiter,g as createProcedure,Y$ as createPathBlocker,G$ as createMiddleware,W$ as createFileSchema,F$ as createContext,c as commonHeaders,A as buildHeaders,E as Router,I as BRPCError};
|
|
5
5
|
|
|
6
|
-
//# debugId=
|
|
6
|
+
//# debugId=5EA302B84D6BC0A664756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -16,6 +16,6 @@
|
|
|
16
16
|
"export async function measure<T>(\r\n label: string,\r\n fn: () => Promise<T>,\r\n): Promise<T> {\r\n const start = performance.now();\r\n try {\r\n return await fn();\r\n } catch (err) {\r\n const end = performance.now();\r\n console.log(`[PERF] ${label} failed after ${(end - start).toFixed(4)} ms`);\r\n throw err;\r\n } finally {\r\n const end = performance.now();\r\n console.log(`[PERF] ${label}: ${(end - start).toFixed(4)} ms`);\r\n }\r\n}\r\n"
|
|
17
17
|
],
|
|
18
18
|
"mappings": "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",
|
|
19
|
-
"debugId": "
|
|
19
|
+
"debugId": "5EA302B84D6BC0A664756E2164756E21",
|
|
20
20
|
"names": []
|
|
21
21
|
}
|