@mateosuarezdev/brpc 1.0.54 → 1.0.55

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.
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- function v(q,G={placeholder:void 0,throwOnInvalid:!0},L){if(!q)return G?.placeholder??"PLACEHOLDER";if(q.url)return q.url;if(q.key)if(q.isPrivate||q.provider==="local")return`/storage/${q.key}`;else return`${L}/${q.key}`;if(G.throwOnInvalid)throw Error("Invalid storage object");else return G?.placeholder??"PLACEHOLDER"}class w extends Error{status;code;clientCode;data;constructor(q,G,L,N,W){super(q);this.name="BrpcClientError",this.status=G,this.code=L,this.clientCode=N,this.data=W}isClientError(q){return this.clientCode===q}isUnauthorized(){return this.status===401}isForbidden(){return this.status===403}isNotFound(){return this.status===404}isValidationError(){return this.status===400||this.code==="BAD_REQUEST"}}function H(q){if(!q)return null;return q.replace(/\//g,"")}function b(q){let G=q&&q.length>0?q:typeof window<"u"?window.location.origin:"";return G=G.endsWith("/")?G.slice(0,-1):G,G}function y(q,G){let L=G?`/${G}/ws`:"/ws";return`${q.replace(/^http/,"ws")}${L}`}function k(q,G){if(q&&G)return`/${q}/${G}`;else if(q&&!G)return`/${q}`;else if(!q&&G)return`/${G}`;else return""}class U{baseUrl;ws=null;subscriptions=new Map;messageQueue=[];isConnected=!1;reconnectTimeout=null;WebSocketImpl;getHeaders;authToken=null;debug;pendingAuth=!1;authActions=[];constructor(q,G,L,N=!1,W){this.baseUrl=q;this.WebSocketImpl=G,this.debug=N&&W==="development",this.getHeaders=async()=>{if(typeof L==="function")return await L();return L??{}},this.connect()}async connect(){try{let q=await this.getHeaders();this.authToken=q.Authorization||null;let G=this.baseUrl;if(this.debug)console.log(`Connecting to WebSocket: ${G}`);this.ws=new this.WebSocketImpl(G),this.ws.onopen=async()=>{if(this.debug)console.log("WebSocket connection established");if(this.isConnected=!0,this.authActions=[],this.authToken){if(this.pendingAuth=!0,this.send({type:"authenticate",token:this.authToken}),this.debug)console.log("Sent authentication token, waiting for response");this.authActions.push(()=>{for(let L of this.subscriptions.keys())if(this.send({type:"subscribe",topic:L}),this.debug)console.log(`Resubscribed to topic: ${L}`);if(this.messageQueue.length>0&&this.debug)console.log(`Sending ${this.messageQueue.length} queued messages`);this.messageQueue.forEach((L)=>this.send(L)),this.messageQueue=[]})}else{for(let L of this.subscriptions.keys())if(this.send({type:"subscribe",topic:L}),this.debug)console.log(`Resubscribed to topic: ${L}`);if(this.messageQueue.length>0&&this.debug)console.log(`Sending ${this.messageQueue.length} queued messages`);this.messageQueue.forEach((L)=>this.send(L)),this.messageQueue=[]}},this.ws.onmessage=(L)=>{try{if(this.debug)console.log("WebSocket message received:",L.data);let N=JSON.parse(L.data);if(N.type==="auth_success"){let W=N.authenticated!==!1;if(this.debug)console.log(`WebSocket ${W?"authentication":"deauthentication"} successful`);if(this.pendingAuth=!1,W)this.authActions.forEach((D)=>D());this.authActions=[];return}if(N.type==="auth_error"){console.error("WebSocket authentication failed:",N.error),this.pendingAuth=!1,this.authActions=[];return}if(this.debug)console.log("Got new message",N);if(N.topic&&this.subscriptions.has(N.topic)){let W=this.subscriptions.get(N.topic);if(this.debug)console.log("Calling subscription callbacks");W?.forEach((D)=>D(N.data))}else if(N.error)console.error("WebSocket error:",N.error);else console.warn("Unhandled WebSocket message format:",N)}catch(N){if(this.debug)console.error("Error processing WebSocket message:",N),console.error("Raw message:",L.data)}},this.ws.onclose=(L)=>{if(this.isConnected=!1,this.pendingAuth=!1,this.debug)console.log(`WebSocket connection closed. Code: ${L.code}, Reason: ${L.reason}`);this.reconnectTimeout=setTimeout(()=>this.connect(),2000)},this.ws.onerror=(L)=>{if(this.debug)console.log("WebSocket error:",L)}}catch(q){if(this.debug)console.log("Failed to create WebSocket connection:",q);this.pendingAuth=!1,this.reconnectTimeout=setTimeout(()=>this.connect(),2000)}}disconnect(){if(this.reconnectTimeout)clearTimeout(this.reconnectTimeout),this.reconnectTimeout=null;if(this.ws)this.ws.close(),this.ws=null;this.isConnected=!1,this.pendingAuth=!1,this.authActions=[],this.subscriptions.clear()}send(q){if(this.isConnected&&this.ws?.readyState===this.WebSocketImpl.OPEN){if(this.pendingAuth&&q.type!=="authenticate"){if(this.messageQueue.push(q),this.debug)console.log("Message queued until authentication completes:",q);return}let G=JSON.stringify(q);if(this.ws.send(G),this.debug)console.log("WebSocket message sent:",G)}else if(this.messageQueue.push(q),this.debug)console.log("WebSocket message queued (not connected):",q)}subscribe(q,G){if(!this.subscriptions.has(q)){if(this.subscriptions.set(q,new Set),this.isConnected){if(this.pendingAuth)this.authActions.push(()=>{if(this.send({type:"subscribe",topic:q}),this.debug)console.log(`Subscribed to topic after auth: ${q}`)});else if(this.send({type:"subscribe",topic:q}),this.debug)console.log(`Subscribed to topic: ${q}`)}}return this.subscriptions.get(q).add(G),{unsubscribe:()=>this.unsubscribe(q,G),publish:(L)=>this.publish(q,L)}}unsubscribe(q,G){let L=this.subscriptions.get(q);if(L){if(L.delete(G),L.size===0){if(this.subscriptions.delete(q),this.send({type:"unsubscribe",topic:q}),this.debug)console.log(`Unsubscribed from topic: ${q}`)}}}publish(q,G){if(this.send({type:"publish",topic:q,data:G}),this.debug)console.log(`Published to topic: ${q}`,G)}async updateAuth(){let G=(await this.getHeaders()).Authorization||"",L=G.startsWith("Bearer ")?G.substring(7).trim():G.trim(),N=L.length>0,W=this.authToken!==null&&this.authToken.trim().length>0;if((N!==W||L!==this.authToken)&&this.isConnected){if(this.authToken=L,this.pendingAuth=N,this.send({type:"authenticate",token:G}),this.debug)if(N)console.log("Updated authentication token, waiting for confirmation");else console.log("Sent empty token for deauthentication"),this.pendingAuth=!1,this.authActions=[]}}}function Gq(q,G={}){let L=G.fetch||fetch,N=G.WebSocket??(typeof WebSocket<"u"?WebSocket:null),W=G.prefix??"",D=G.apiPrefix??"",M=G.debug??!1,m=G.s3Endpoint,g=G.nodeEnv;if(!G.s3Endpoint)throw Error("BRPC Client: Pass s3Endpoint option to createBrpcClient");if(!G.nodeEnv)throw Error("BRPC Client: Pass nodeEnv option to createBrpcClient");if(!N)throw Error("WebSocket is not available in this environment");let V=G.headers??{},c=async()=>{if(typeof V==="function")return await V();return V},B=b(q),x=H(G.prefix),d=H(G.apiPrefix),E=k(x,d),P=y(B,x),S=new U(P,N,V,M,g),O=async(Q=!0)=>{let F={};if(Q)F["Content-Type"]="application/json";let J=await c();return{...F,...J}},u=async(Q)=>{if(!Q.ok){let J;try{J=await Q.json()}catch{try{J={error:await Q.text()}}catch{J={error:"Failed to parse error response"}}}if(J?.error&&typeof J.error==="object"){let A=J.error;throw new w(A.message||Q.statusText,Q.status,A.code,A.clientCode,A.data)}let z=J?.error||J?.message||Q.statusText;throw new w(z,Q.status,void 0,void 0,J)}let F=Q.headers.get("Content-Type")||"";try{if(F.includes("application/json"))return(await Q.json()).data;else if(F.includes("text/"))return Q.text();else return Q.blob()}catch(J){throw new w(`Failed to parse response: ${J instanceof Error?J.message:"Unknown error"}`,Q.status,"PARSE_ERROR")}},j=async(Q,F)=>{try{let J=await L(Q,F);return await u(J)}catch(J){if(J instanceof w)throw J;throw new w(J instanceof Error?J.message:"Network request failed",0,"NETWORK_ERROR")}},h=(Q=[])=>{return new Proxy({},{get(F,J){if(typeof J==="symbol")return;if(J==="query"||J==="mutation"||J==="formMutation"||J==="subscription"||J==="getStringKey"||J==="getArrayKey"||J==="getNoInputsArrayKey"){let z=Q.join("/"),A=`${B}${E}/${z}`;if(M)console.log(`BRPC ${J} procedure path: ${z}`),console.log(`BRPC ${J} full URL: ${A}`);if(J==="query")return async(X)=>{let _=await O(!0);if(M)console.log(`BRPC query request to ${z}`,{input:X,headers:_});let $=new URL(A);if(X&&typeof X==="object")Object.entries(X).forEach(([R,Y])=>{if(Y!==void 0)$.searchParams.append(R,String(Y))});let I=await j($.toString(),{method:"GET",headers:_,credentials:"include"});if(M)console.log(`BRPC query response from ${z}:`,I);return I};else if(J==="mutation")return async(X)=>{let _=await O(!0);if(M)console.log(`BRPC mutation request to ${z}`,{input:X,headers:_});let $=JSON.stringify(X),I=await j(A,{method:"POST",headers:_,body:$,credentials:"include"});if(M)console.log(`BRPC mutation response from ${z}:`,I);return I};else if(J==="formMutation")return async(X)=>{let _=await O(!1);if(M)console.log(`BRPC formMutation request to ${z}`,{input:X,headers:_});let $=new FormData,I=(Y,Z,f)=>{let C=f?`${f}[${Y}]`:Y;if(Z===null||Z===void 0)return;else if(Z instanceof File||Z instanceof Blob)$.append(C,Z);else if(Array.isArray(Z))Z.forEach((T,K)=>{if(T instanceof File||T instanceof Blob)$.append(C,T);else if(typeof T==="object"&&T!==null)Object.entries(T).forEach(([n,i])=>{I(n,i,`${C}[${K}]`)});else $.append(`${C}[${K}]`,String(T))});else if(typeof Z==="object"&&Z!==null)Object.entries(Z).forEach(([T,K])=>{I(T,K,C)});else $.append(C,String(Z))};Object.entries(X).forEach(([Y,Z])=>{I(Y,Z)});let R=await j(A,{method:"POST",headers:_,body:$,credentials:"include"});if(M)console.log(`BRPC formMutation response from ${z}:`,R);return R};else if(J==="subscription")return(X)=>{if(M)console.log(`BRPC subscription to ${z}`);let _=E?`${E.slice(1)}/${z}`:z;return S.updateAuth(),S.subscribe(_,X)};else if(J==="getStringKey")return(X)=>{let _=z;if(!X||Object.keys(X).length===0)return _;let $=Object.keys(X).sort().reduce((R,Y)=>{let Z=X[Y];if(Z!==void 0&&Z!==null)R[Y]=Z;return R},{});if(Object.keys($).length===0)return _;let I=JSON.stringify($);return`${_}?${I}`};else if(J==="getArrayKey")return(X)=>{let _=z;if(!X||Object.keys(X).length===0)return[_];let $=[];if(Object.keys(X).sort().forEach((R)=>{let Y=X[R];if(Y!==void 0&&Y!==null){let Z=Y;if(typeof Y==="boolean"||typeof Y==="number")Z=String(Y);else if(typeof Y==="object")Z=JSON.stringify(Y);$.push([R,Z])}}),$.length===0)return[_];let I=$.flatMap(([R,Y])=>[R,Y]);return[_,...I]};else if(J==="getNoInputsArrayKey")return()=>{return[z]}}return h([...Q,J])}})},l=h();if(M)console.log("BRPC client created",{baseUrl:B,prefix:E,wsUrl:P});return{routes:l,storage:{getObjectUrl:(Q,F)=>v(Q,F,m)},utils:{updateWsAuth:async()=>await S.updateAuth(),setHeader:async(Q,F)=>{if(typeof V==="function"){console.warn("Cannot use setHeader with function-based headers resolver");return}V={...V,[Q]:F},await S.updateAuth()},setHeaders:async(Q)=>{if(typeof V==="function"){console.warn("Cannot use setHeaders with function-based headers resolver");return}V={...V,...Q},await S.updateAuth()}}}}export{v as getObjectUrl,Gq as createBrpcClient,w as BrpcClientError};
2
+ function getObjectUrl(storageObject,options={placeholder:void 0,throwOnInvalid:!0},s3Endpoint){if(!storageObject)return options?.placeholder??"PLACEHOLDER";if(storageObject.url)return storageObject.url;if(storageObject.key)if(storageObject.isPrivate||storageObject.provider==="local")return`/storage/${storageObject.key}`;else return`${s3Endpoint}/${storageObject.key}`;if(options.throwOnInvalid)throw Error("Invalid storage object");else return options?.placeholder??"PLACEHOLDER"}class BrpcClientError extends Error{status;code;clientCode;data;constructor(message,status,code,clientCode,data){super(message);this.name="BrpcClientError",this.status=status,this.code=code,this.clientCode=clientCode,this.data=data}isClientError(clientCode){return this.clientCode===clientCode}isUnauthorized(){return this.status===401}isForbidden(){return this.status===403}isNotFound(){return this.status===404}isValidationError(){return this.status===400||this.code==="BAD_REQUEST"}}function parsePrefix(prefix){if(!prefix)return null;return prefix.replace(/\//g,"")}function getFormattedBaseUrl(baseUrl){let formattedBaseUrl=baseUrl&&baseUrl.length>0?baseUrl:typeof window<"u"?window.location.origin:"";return formattedBaseUrl=formattedBaseUrl.endsWith("/")?formattedBaseUrl.slice(0,-1):formattedBaseUrl,formattedBaseUrl}function getWsUrl(formattedBaseUrl,parsedPrefix){let wsPath=parsedPrefix?`/${parsedPrefix}/ws`:"/ws";return`${formattedBaseUrl.replace(/^http/,"ws")}${wsPath}`}function getProceduresPrefixPath(parsedPrefix,parsedApiPrefix){if(parsedPrefix&&parsedApiPrefix)return`/${parsedPrefix}/${parsedApiPrefix}`;else if(parsedPrefix&&!parsedApiPrefix)return`/${parsedPrefix}`;else if(!parsedPrefix&&parsedApiPrefix)return`/${parsedApiPrefix}`;else return""}class WebSocketManager{baseUrl;ws=null;subscriptions=new Map;messageQueue=[];isConnected=!1;reconnectTimeout=null;WebSocketImpl;getHeaders;authToken=null;debug;pendingAuth=!1;authActions=[];constructor(baseUrl,WebSocketImpl,headersResolver,debug=!1,nodeEnv){this.baseUrl=baseUrl;this.WebSocketImpl=WebSocketImpl,this.debug=debug&&nodeEnv==="development",this.getHeaders=async()=>{if(typeof headersResolver==="function")return await headersResolver();return headersResolver??{}},this.connect()}async connect(){try{let headers=await this.getHeaders();this.authToken=headers.Authorization||null;let wsUrl=this.baseUrl;if(this.debug)console.log(`Connecting to WebSocket: ${wsUrl}`);this.ws=new this.WebSocketImpl(wsUrl),this.ws.onopen=async()=>{if(this.debug)console.log("WebSocket connection established");if(this.isConnected=!0,this.authActions=[],this.authToken){if(this.pendingAuth=!0,this.send({type:"authenticate",token:this.authToken}),this.debug)console.log("Sent authentication token, waiting for response");this.authActions.push(()=>{for(let topic of this.subscriptions.keys())if(this.send({type:"subscribe",topic}),this.debug)console.log(`Resubscribed to topic: ${topic}`);if(this.messageQueue.length>0&&this.debug)console.log(`Sending ${this.messageQueue.length} queued messages`);this.messageQueue.forEach((msg)=>this.send(msg)),this.messageQueue=[]})}else{for(let topic of this.subscriptions.keys())if(this.send({type:"subscribe",topic}),this.debug)console.log(`Resubscribed to topic: ${topic}`);if(this.messageQueue.length>0&&this.debug)console.log(`Sending ${this.messageQueue.length} queued messages`);this.messageQueue.forEach((msg)=>this.send(msg)),this.messageQueue=[]}},this.ws.onmessage=(event)=>{try{if(this.debug)console.log("WebSocket message received:",event.data);let message=JSON.parse(event.data);if(message.type==="auth_success"){let isAuthenticated=message.authenticated!==!1;if(this.debug)console.log(`WebSocket ${isAuthenticated?"authentication":"deauthentication"} successful`);if(this.pendingAuth=!1,isAuthenticated)this.authActions.forEach((action)=>action());this.authActions=[];return}if(message.type==="auth_error"){console.error("WebSocket authentication failed:",message.error),this.pendingAuth=!1,this.authActions=[];return}if(this.debug)console.log("Got new message",message);if(message.topic&&this.subscriptions.has(message.topic)){let callbacks=this.subscriptions.get(message.topic);if(this.debug)console.log("Calling subscription callbacks");callbacks?.forEach((callback)=>callback(message.data))}else if(message.error)console.error("WebSocket error:",message.error);else console.warn("Unhandled WebSocket message format:",message)}catch(error){if(this.debug)console.error("Error processing WebSocket message:",error),console.error("Raw message:",event.data)}},this.ws.onclose=(event)=>{if(this.isConnected=!1,this.pendingAuth=!1,this.debug)console.log(`WebSocket connection closed. Code: ${event.code}, Reason: ${event.reason}`);this.reconnectTimeout=setTimeout(()=>this.connect(),2000)},this.ws.onerror=(error)=>{if(this.debug)console.log("WebSocket error:",error)}}catch(error){if(this.debug)console.log("Failed to create WebSocket connection:",error);this.pendingAuth=!1,this.reconnectTimeout=setTimeout(()=>this.connect(),2000)}}disconnect(){if(this.reconnectTimeout)clearTimeout(this.reconnectTimeout),this.reconnectTimeout=null;if(this.ws)this.ws.close(),this.ws=null;this.isConnected=!1,this.pendingAuth=!1,this.authActions=[],this.subscriptions.clear()}send(message){if(this.isConnected&&this.ws?.readyState===this.WebSocketImpl.OPEN){if(this.pendingAuth&&message.type!=="authenticate"){if(this.messageQueue.push(message),this.debug)console.log("Message queued until authentication completes:",message);return}let messageStr=JSON.stringify(message);if(this.ws.send(messageStr),this.debug)console.log("WebSocket message sent:",messageStr)}else if(this.messageQueue.push(message),this.debug)console.log("WebSocket message queued (not connected):",message)}subscribe(topic,callback){if(!this.subscriptions.has(topic)){if(this.subscriptions.set(topic,new Set),this.isConnected){if(this.pendingAuth)this.authActions.push(()=>{if(this.send({type:"subscribe",topic}),this.debug)console.log(`Subscribed to topic after auth: ${topic}`)});else if(this.send({type:"subscribe",topic}),this.debug)console.log(`Subscribed to topic: ${topic}`)}}return this.subscriptions.get(topic).add(callback),{unsubscribe:()=>this.unsubscribe(topic,callback),publish:(data)=>this.publish(topic,data)}}unsubscribe(topic,callback){let callbacks=this.subscriptions.get(topic);if(callbacks){if(callbacks.delete(callback),callbacks.size===0){if(this.subscriptions.delete(topic),this.send({type:"unsubscribe",topic}),this.debug)console.log(`Unsubscribed from topic: ${topic}`)}}}publish(topic,data){if(this.send({type:"publish",topic,data}),this.debug)console.log(`Published to topic: ${topic}`,data)}async updateAuth(){let authHeader=(await this.getHeaders()).Authorization||"",newToken=authHeader.startsWith("Bearer ")?authHeader.substring(7).trim():authHeader.trim(),hasValidToken=newToken.length>0,hadValidToken=this.authToken!==null&&this.authToken.trim().length>0;if((hasValidToken!==hadValidToken||newToken!==this.authToken)&&this.isConnected){if(this.authToken=newToken,this.pendingAuth=hasValidToken,this.send({type:"authenticate",token:authHeader}),this.debug)if(hasValidToken)console.log("Updated authentication token, waiting for confirmation");else console.log("Sent empty token for deauthentication"),this.pendingAuth=!1,this.authActions=[]}}}function createBrpcClient(baseUrl,options={}){let fetchImpl=options.fetch||fetch,WebSocketImpl=options.WebSocket??(typeof WebSocket<"u"?WebSocket:null),prefix=options.prefix??"",apiPrefix=options.apiPrefix??"",debug=options.debug??!1,s3Endpoint=options.s3Endpoint,nodeEnv=options.nodeEnv;if(!options.s3Endpoint)throw Error("BRPC Client: Pass s3Endpoint option to createBrpcClient");if(!options.nodeEnv)throw Error("BRPC Client: Pass nodeEnv option to createBrpcClient");if(!WebSocketImpl)throw Error("WebSocket is not available in this environment");let currentHeaders=options.headers??{},headersResolver=async()=>{if(typeof currentHeaders==="function")return await currentHeaders();return currentHeaders},formattedBaseUrl=getFormattedBaseUrl(baseUrl),parsedPrefix=parsePrefix(options.prefix),parsedApiPrefix=parsePrefix(options.apiPrefix),proceduresPrefixedPath=getProceduresPrefixPath(parsedPrefix,parsedApiPrefix),wsUrl=getWsUrl(formattedBaseUrl,parsedPrefix),wsManager=new WebSocketManager(wsUrl,WebSocketImpl,currentHeaders,debug,nodeEnv),resolveHeaders=async(defaultContentType=!0)=>{let baseHeaders={};if(defaultContentType)baseHeaders["Content-Type"]="application/json";let dynamicHeaders=await headersResolver();return{...baseHeaders,...dynamicHeaders}},handleResponse=async(response)=>{if(!response.ok){let errorData;try{errorData=await response.json()}catch{try{errorData={error:await response.text()}}catch{errorData={error:"Failed to parse error response"}}}if(errorData?.error&&typeof errorData.error==="object"){let serverError=errorData.error;throw new BrpcClientError(serverError.message||response.statusText,response.status,serverError.code,serverError.clientCode,serverError.data)}let errorMessage=errorData?.error||errorData?.message||response.statusText;throw new BrpcClientError(errorMessage,response.status,void 0,void 0,errorData)}let contentType=response.headers.get("Content-Type")||"";try{if(contentType.includes("application/json"))return(await response.json()).data;else if(contentType.includes("text/"))return response.text();else return response.blob()}catch(error){throw new BrpcClientError(`Failed to parse response: ${error instanceof Error?error.message:"Unknown error"}`,response.status,"PARSE_ERROR")}},safeFetch=async(url,init)=>{try{let response=await fetchImpl(url,init);return await handleResponse(response)}catch(error){if(error instanceof BrpcClientError)throw error;throw new BrpcClientError(error instanceof Error?error.message:"Network request failed",0,"NETWORK_ERROR")}},createProxy=(pathSegments=[])=>{return new Proxy({},{get(_,key){if(typeof key==="symbol")return;if(key==="query"||key==="mutation"||key==="formMutation"||key==="subscription"||key==="getStringKey"||key==="getArrayKey"||key==="getNoInputsArrayKey"){let procedurePath=pathSegments.join("/"),fullUrl=`${formattedBaseUrl}${proceduresPrefixedPath}/${procedurePath}`;if(debug)console.log(`BRPC ${key} procedure path: ${procedurePath}`),console.log(`BRPC ${key} full URL: ${fullUrl}`);if(key==="query")return async(input)=>{let headers=await resolveHeaders(!0);if(debug)console.log(`BRPC query request to ${procedurePath}`,{input,headers});let url=new URL(fullUrl);if(input&&typeof input==="object")Object.entries(input).forEach(([k,v])=>{if(v!==void 0)url.searchParams.append(k,String(v))});let result=await safeFetch(url.toString(),{method:"GET",headers,credentials:"include"});if(debug)console.log(`BRPC query response from ${procedurePath}:`,result);return result};else if(key==="mutation")return async(input)=>{let headers=await resolveHeaders(!0);if(debug)console.log(`BRPC mutation request to ${procedurePath}`,{input,headers});let body=JSON.stringify(input),result=await safeFetch(fullUrl,{method:"POST",headers,body,credentials:"include"});if(debug)console.log(`BRPC mutation response from ${procedurePath}:`,result);return result};else if(key==="formMutation")return async(input)=>{let headers=await resolveHeaders(!1);if(debug)console.log(`BRPC formMutation request to ${procedurePath}`,{input,headers});let formData=new FormData,appendToFormData=(key2,value,parentKey)=>{let fullKey=parentKey?`${parentKey}[${key2}]`:key2;if(value===null||value===void 0)return;else if(value instanceof File||value instanceof Blob)formData.append(fullKey,value);else if(Array.isArray(value))value.forEach((item,index)=>{if(item instanceof File||item instanceof Blob)formData.append(fullKey,item);else if(typeof item==="object"&&item!==null)Object.entries(item).forEach(([subKey,subValue])=>{appendToFormData(subKey,subValue,`${fullKey}[${index}]`)});else formData.append(`${fullKey}[${index}]`,String(item))});else if(typeof value==="object"&&value!==null)Object.entries(value).forEach(([subKey,subValue])=>{appendToFormData(subKey,subValue,fullKey)});else formData.append(fullKey,String(value))};Object.entries(input).forEach(([key2,value])=>{appendToFormData(key2,value)});let result=await safeFetch(fullUrl,{method:"POST",headers,body:formData,credentials:"include"});if(debug)console.log(`BRPC formMutation response from ${procedurePath}:`,result);return result};else if(key==="subscription")return(callback)=>{if(debug)console.log(`BRPC subscription to ${procedurePath}`);let topicPath=proceduresPrefixedPath?`${proceduresPrefixedPath.slice(1)}/${procedurePath}`:procedurePath;return wsManager.updateAuth(),wsManager.subscribe(topicPath,callback)};else if(key==="getStringKey")return(input)=>{let baseKey=procedurePath;if(!input||Object.keys(input).length===0)return baseKey;let sortedInput=Object.keys(input).sort().reduce((result,key2)=>{let value=input[key2];if(value!==void 0&&value!==null)result[key2]=value;return result},{});if(Object.keys(sortedInput).length===0)return baseKey;let inputString=JSON.stringify(sortedInput);return`${baseKey}?${inputString}`};else if(key==="getArrayKey")return(input)=>{let basePath=procedurePath;if(!input||Object.keys(input).length===0)return[basePath];let normalizedPairs=[];if(Object.keys(input).sort().forEach((key2)=>{let value=input[key2];if(value!==void 0&&value!==null){let normalizedValue=value;if(typeof value==="boolean"||typeof value==="number")normalizedValue=String(value);else if(typeof value==="object")normalizedValue=JSON.stringify(value);normalizedPairs.push([key2,normalizedValue])}}),normalizedPairs.length===0)return[basePath];let inputSegments=normalizedPairs.flatMap(([key2,value])=>[key2,value]);return[basePath,...inputSegments]};else if(key==="getNoInputsArrayKey")return()=>{return[procedurePath]}}return createProxy([...pathSegments,key])}})},clientProxy=createProxy();if(debug)console.log("BRPC client created",{baseUrl:formattedBaseUrl,prefix:proceduresPrefixedPath,wsUrl});return{routes:clientProxy,storage:{getObjectUrl:(storageObject,opts)=>getObjectUrl(storageObject,opts,s3Endpoint)},utils:{updateWsAuth:async()=>await wsManager.updateAuth(),setHeader:async(key,value)=>{if(typeof currentHeaders==="function"){console.warn("Cannot use setHeader with function-based headers resolver");return}currentHeaders={...currentHeaders,[key]:value},await wsManager.updateAuth()},setHeaders:async(headers)=>{if(typeof currentHeaders==="function"){console.warn("Cannot use setHeaders with function-based headers resolver");return}currentHeaders={...currentHeaders,...headers},await wsManager.updateAuth()}}}}export{getObjectUrl,createBrpcClient,BrpcClientError};
3
3
 
4
- //# debugId=B93CAD61847F968E64756E2164756E21
4
+ //# debugId=973A07DA47C3294664756E2164756E21
@@ -8,7 +8,7 @@
8
8
  "import type { HeadersResolver } from \"./types\";\r\n\r\n// WebSocket Manager with improved authentication handling\r\nclass WebSocketManager {\r\n private ws: WebSocket | null = null;\r\n private subscriptions: Map<string, Set<(data: any) => void>> = new Map();\r\n private messageQueue: any[] = [];\r\n private isConnected: boolean = false;\r\n private reconnectTimeout: any = null;\r\n private WebSocketImpl: typeof WebSocket;\r\n private getHeaders: () => Promise<Record<string, string>>;\r\n private authToken: string | null = null;\r\n private debug: boolean;\r\n private pendingAuth: boolean = false; // Track if we're waiting for auth response\r\n private authActions: (() => void)[] = []; // Actions to perform after successful auth\r\n\r\n constructor(\r\n private baseUrl: string,\r\n WebSocketImpl: typeof WebSocket,\r\n headersResolver: HeadersResolver,\r\n debug: boolean = false,\r\n nodeEnv: string,\r\n ) {\r\n this.WebSocketImpl = WebSocketImpl;\r\n this.debug = debug && nodeEnv === \"development\";\r\n\r\n // Create headers resolver function\r\n this.getHeaders = async () => {\r\n if (typeof headersResolver === \"function\") {\r\n return await headersResolver();\r\n }\r\n return headersResolver ?? {};\r\n };\r\n\r\n this.connect();\r\n }\r\n\r\n private async connect() {\r\n try {\r\n // Get latest headers for authentication\r\n const headers = await this.getHeaders();\r\n this.authToken = headers[\"Authorization\"] || null;\r\n\r\n const wsUrl = this.baseUrl;\r\n\r\n if (this.debug) {\r\n console.log(`Connecting to WebSocket: ${wsUrl}`);\r\n }\r\n\r\n this.ws = new this.WebSocketImpl(wsUrl);\r\n\r\n this.ws.onopen = async () => {\r\n if (this.debug) {\r\n console.log(\"WebSocket connection established\");\r\n }\r\n\r\n this.isConnected = true;\r\n\r\n // Clear any pending auth actions from previous connection attempts\r\n this.authActions = [];\r\n\r\n // If we have auth token, send it first and mark auth as pending\r\n if (this.authToken) {\r\n this.pendingAuth = true;\r\n this.send({ type: \"authenticate\", token: this.authToken });\r\n if (this.debug) {\r\n console.log(\"Sent authentication token, waiting for response\");\r\n }\r\n\r\n // Queue resubscriptions to happen after authentication\r\n this.authActions.push(() => {\r\n // Resubscribe to all topics\r\n for (const topic of this.subscriptions.keys()) {\r\n this.send({ type: \"subscribe\", topic });\r\n if (this.debug) {\r\n console.log(`Resubscribed to topic: ${topic}`);\r\n }\r\n }\r\n\r\n // Send any queued messages\r\n if (this.messageQueue.length > 0 && this.debug) {\r\n console.log(\r\n `Sending ${this.messageQueue.length} queued messages`,\r\n );\r\n }\r\n\r\n this.messageQueue.forEach((msg) => this.send(msg));\r\n this.messageQueue = [];\r\n });\r\n } else {\r\n // No auth needed, proceed with subscriptions immediately\r\n for (const topic of this.subscriptions.keys()) {\r\n this.send({ type: \"subscribe\", topic });\r\n if (this.debug) {\r\n console.log(`Resubscribed to topic: ${topic}`);\r\n }\r\n }\r\n\r\n // Send any queued messages\r\n if (this.messageQueue.length > 0 && this.debug) {\r\n console.log(`Sending ${this.messageQueue.length} queued messages`);\r\n }\r\n\r\n this.messageQueue.forEach((msg) => this.send(msg));\r\n this.messageQueue = [];\r\n }\r\n };\r\n\r\n this.ws.onmessage = (event) => {\r\n try {\r\n if (this.debug) {\r\n // console.log(\"Active subscriptions\", this.subscriptions);\r\n console.log(\"WebSocket message received:\", event.data);\r\n }\r\n\r\n const message = JSON.parse(event.data);\r\n\r\n // Handle auth-specific messages\r\n if (message.type === \"auth_success\") {\r\n // Check if authentication was successful or if it was a logout confirmation\r\n const isAuthenticated = message.authenticated !== false;\r\n\r\n if (this.debug) {\r\n console.log(\r\n `WebSocket ${\r\n isAuthenticated ? \"authentication\" : \"deauthentication\"\r\n } successful`,\r\n );\r\n }\r\n\r\n // Clear pending auth state\r\n this.pendingAuth = false;\r\n\r\n // Only execute queued actions for successful authentication\r\n if (isAuthenticated) {\r\n // Execute all queued actions that were waiting for authentication\r\n this.authActions.forEach((action) => action());\r\n }\r\n\r\n // Clear action queue\r\n this.authActions = [];\r\n\r\n return;\r\n }\r\n\r\n if (message.type === \"auth_error\") {\r\n console.error(\"WebSocket authentication failed:\", message.error);\r\n\r\n // Clear pending auth state but don't process queued actions\r\n this.pendingAuth = false;\r\n this.authActions = [];\r\n\r\n return;\r\n }\r\n\r\n if (this.debug) {\r\n console.log(\"Got new message\", message);\r\n }\r\n\r\n if (message.topic && this.subscriptions.has(message.topic)) {\r\n const callbacks = this.subscriptions.get(message.topic);\r\n if (this.debug) {\r\n console.log(\"Calling subscription callbacks\");\r\n }\r\n callbacks?.forEach((callback) => callback(message.data));\r\n } else if (message.error) {\r\n console.error(\"WebSocket error:\", message.error);\r\n } else {\r\n // Log unknown message formats to help debug\r\n console.warn(\"Unhandled WebSocket message format:\", message);\r\n }\r\n } catch (error) {\r\n if (this.debug) {\r\n console.error(\"Error processing WebSocket message:\", error);\r\n console.error(\"Raw message:\", event.data);\r\n }\r\n }\r\n };\r\n\r\n this.ws.onclose = (event) => {\r\n this.isConnected = false;\r\n this.pendingAuth = false; // Reset auth state\r\n\r\n if (this.debug) {\r\n console.log(\r\n `WebSocket connection closed. Code: ${event.code}, Reason: ${event.reason}`,\r\n );\r\n }\r\n\r\n // Try to reconnect after a delay\r\n this.reconnectTimeout = setTimeout(() => this.connect(), 2000);\r\n };\r\n\r\n this.ws.onerror = (error) => {\r\n if (this.debug) {\r\n console.log(\"WebSocket error:\", error);\r\n }\r\n };\r\n } catch (error) {\r\n if (this.debug) {\r\n console.log(\"Failed to create WebSocket connection:\", error);\r\n }\r\n this.pendingAuth = false;\r\n // Try to reconnect after a delay\r\n this.reconnectTimeout = setTimeout(() => this.connect(), 2000);\r\n }\r\n }\r\n\r\n public disconnect() {\r\n if (this.reconnectTimeout) {\r\n clearTimeout(this.reconnectTimeout);\r\n this.reconnectTimeout = null;\r\n }\r\n\r\n if (this.ws) {\r\n this.ws.close();\r\n this.ws = null;\r\n }\r\n\r\n this.isConnected = false;\r\n this.pendingAuth = false;\r\n this.authActions = [];\r\n this.subscriptions.clear();\r\n }\r\n\r\n public send(message: any) {\r\n if (this.isConnected && this.ws?.readyState === this.WebSocketImpl.OPEN) {\r\n // If authentication is pending and this isn't an auth message, queue it\r\n if (this.pendingAuth && message.type !== \"authenticate\") {\r\n this.messageQueue.push(message);\r\n if (this.debug) {\r\n console.log(\r\n \"Message queued until authentication completes:\",\r\n message,\r\n );\r\n }\r\n return;\r\n }\r\n\r\n const messageStr = JSON.stringify(message);\r\n this.ws.send(messageStr);\r\n\r\n if (this.debug) {\r\n console.log(\"WebSocket message sent:\", messageStr);\r\n }\r\n } else {\r\n this.messageQueue.push(message);\r\n\r\n if (this.debug) {\r\n console.log(\"WebSocket message queued (not connected):\", message);\r\n }\r\n }\r\n }\r\n\r\n public subscribe(topic: string, callback: (data: any) => void) {\r\n if (!this.subscriptions.has(topic)) {\r\n this.subscriptions.set(topic, new Set());\r\n\r\n // If we're connected, send the subscription (with auth awareness)\r\n if (this.isConnected) {\r\n if (this.pendingAuth) {\r\n // Queue the subscription for after auth\r\n this.authActions.push(() => {\r\n this.send({ type: \"subscribe\", topic });\r\n if (this.debug) {\r\n console.log(`Subscribed to topic after auth: ${topic}`);\r\n }\r\n });\r\n } else {\r\n // Send immediately\r\n this.send({ type: \"subscribe\", topic });\r\n if (this.debug) {\r\n console.log(`Subscribed to topic: ${topic}`);\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.subscriptions.get(topic)!.add(callback);\r\n\r\n return {\r\n unsubscribe: () => this.unsubscribe(topic, callback),\r\n publish: (data: any) => this.publish(topic, data),\r\n };\r\n }\r\n\r\n private unsubscribe(topic: string, callback: (data: any) => void) {\r\n const callbacks = this.subscriptions.get(topic);\r\n if (callbacks) {\r\n callbacks.delete(callback);\r\n if (callbacks.size === 0) {\r\n this.subscriptions.delete(topic);\r\n this.send({ type: \"unsubscribe\", topic });\r\n\r\n if (this.debug) {\r\n console.log(`Unsubscribed from topic: ${topic}`);\r\n }\r\n }\r\n }\r\n }\r\n\r\n public publish(topic: string, data: any) {\r\n this.send({ type: \"publish\", topic, data });\r\n\r\n if (this.debug) {\r\n console.log(`Published to topic: ${topic}`, data);\r\n }\r\n }\r\n\r\n // Method to update auth token when it changes\r\n public async updateAuth() {\r\n const headers = await this.getHeaders();\r\n const authHeader = headers[\"Authorization\"] || \"\";\r\n\r\n // Extract token from header - may be empty (\"Bearer \")\r\n const newToken = authHeader.startsWith(\"Bearer \")\r\n ? authHeader.substring(7).trim()\r\n : authHeader.trim();\r\n\r\n const hasValidToken = newToken.length > 0;\r\n const hadValidToken =\r\n this.authToken !== null && this.authToken.trim().length > 0;\r\n\r\n // If token status changed and we're connected, handle the change\r\n if (\r\n (hasValidToken !== hadValidToken || newToken !== this.authToken) &&\r\n this.isConnected\r\n ) {\r\n // Update stored token\r\n this.authToken = newToken;\r\n\r\n // Always send authenticate message, but with empty token when logging out\r\n this.pendingAuth = hasValidToken;\r\n this.send({ type: \"authenticate\", token: authHeader });\r\n\r\n if (this.debug) {\r\n if (hasValidToken) {\r\n console.log(\"Updated authentication token, waiting for confirmation\");\r\n } else {\r\n console.log(\"Sent empty token for deauthentication\");\r\n // Since we're not expecting auth confirmation for logout, clear pending state\r\n this.pendingAuth = false;\r\n this.authActions = [];\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport { WebSocketManager };\r\n",
9
9
  "import { BrpcClientError } from \"./brpc-client-error\";\r\nimport { getObjectUrl } from \"./storage\";\r\nimport type {\r\n HeadersResolver,\r\n BrpcClient,\r\n InferClientRoutes,\r\n BrpcClientOptions,\r\n} from \"./types\";\r\nimport {\r\n getFormattedBaseUrl,\r\n getProceduresPrefixPath,\r\n getWsUrl,\r\n parsePrefix,\r\n} from \"./utils\";\r\nimport { WebSocketManager } from \"./ws-manager\";\r\n\r\n/**\r\n * Creates a type-safe client for the BRPC API\r\n * @param baseUrl The base URL of the BRPC server\r\n * @param options Client configuration options\r\n * @returns A client object that mirrors the server routes\r\n */\r\nexport function createBrpcClient<TRoutesStructure>(\r\n baseUrl: string,\r\n options: BrpcClientOptions = {},\r\n): BrpcClient<TRoutesStructure> {\r\n const fetchImpl = options.fetch || fetch;\r\n const WebSocketImpl =\r\n options.WebSocket ?? (typeof WebSocket !== \"undefined\" ? WebSocket : null);\r\n const prefix = options.prefix ?? \"\";\r\n const apiPrefix = options.apiPrefix ?? \"\";\r\n const debug = options.debug ?? false;\r\n const s3Endpoint = options.s3Endpoint;\r\n const nodeEnv = options.nodeEnv;\r\n\r\n if (!options.s3Endpoint) {\r\n throw new Error(\"BRPC Client: Pass s3Endpoint option to createBrpcClient\");\r\n }\r\n\r\n if (!options.nodeEnv) {\r\n throw new Error(\"BRPC Client: Pass nodeEnv option to createBrpcClient\");\r\n }\r\n\r\n if (!WebSocketImpl) {\r\n throw new Error(\"WebSocket is not available in this environment\");\r\n }\r\n\r\n let currentHeaders: HeadersResolver = options.headers ?? {};\r\n\r\n const headersResolver: HeadersResolver = async () => {\r\n if (typeof currentHeaders === \"function\") {\r\n return await currentHeaders();\r\n }\r\n return currentHeaders;\r\n };\r\n\r\n // Properly format the base URL\r\n const formattedBaseUrl = getFormattedBaseUrl(baseUrl);\r\n\r\n // Format prefixes (returns clean word, like api, without\r\n // initial and trailing slahes)\r\n const parsedPrefix = parsePrefix(options.prefix);\r\n const parsedApiPrefix = parsePrefix(options.apiPrefix);\r\n\r\n const proceduresPrefixedPath = getProceduresPrefixPath(\r\n parsedPrefix,\r\n parsedApiPrefix,\r\n );\r\n\r\n // Create WebSocket URL with proper path joining\r\n const wsUrl = getWsUrl(formattedBaseUrl, parsedPrefix);\r\n\r\n // Create WebSocket manager with headers resolver\r\n const wsManager = new WebSocketManager(\r\n wsUrl,\r\n WebSocketImpl,\r\n currentHeaders,\r\n debug,\r\n nodeEnv!,\r\n );\r\n\r\n // Helper to resolve headers before each request\r\n const resolveHeaders = async (\r\n defaultContentType = true,\r\n ): Promise<Record<string, string>> => {\r\n const baseHeaders: Record<string, string> = {};\r\n\r\n if (defaultContentType) {\r\n baseHeaders[\"Content-Type\"] = \"application/json\";\r\n }\r\n\r\n // Use the same headersResolver as WebSocket\r\n const dynamicHeaders = await headersResolver();\r\n return { ...baseHeaders, ...dynamicHeaders };\r\n };\r\n\r\n // Helper to handle HTTP responses\r\n const handleResponse = async (response: Response) => {\r\n if (!response.ok) {\r\n let errorData;\r\n try {\r\n errorData = await response.json();\r\n } catch {\r\n try {\r\n errorData = { error: await response.text() };\r\n } catch {\r\n errorData = { error: \"Failed to parse error response\" };\r\n }\r\n }\r\n\r\n // Handle the new BRPCError format from server\r\n if (errorData?.error && typeof errorData.error === \"object\") {\r\n const serverError = errorData.error;\r\n\r\n throw new BrpcClientError(\r\n serverError.message || response.statusText,\r\n response.status,\r\n serverError.code,\r\n serverError.clientCode,\r\n serverError.data,\r\n );\r\n }\r\n\r\n // Handle legacy error format or simple string errors\r\n const errorMessage =\r\n errorData?.error || errorData?.message || response.statusText;\r\n\r\n throw new BrpcClientError(\r\n errorMessage,\r\n response.status,\r\n undefined,\r\n undefined,\r\n errorData,\r\n );\r\n }\r\n\r\n // Check content type to determine how to handle the response\r\n const contentType = response.headers.get(\"Content-Type\") || \"\";\r\n\r\n try {\r\n if (contentType.includes(\"application/json\")) {\r\n const result = await response.json();\r\n return result.data;\r\n } else if (contentType.includes(\"text/\")) {\r\n return response.text();\r\n } else {\r\n return response.blob();\r\n }\r\n } catch (error) {\r\n // Wrap JSON parsing errors\r\n throw new BrpcClientError(\r\n `Failed to parse response: ${\r\n error instanceof Error ? error.message : \"Unknown error\"\r\n }`,\r\n response.status,\r\n \"PARSE_ERROR\",\r\n );\r\n }\r\n };\r\n\r\n // Wrap fetch AND response handling to always return BrpcClientError\r\n const safeFetch = async (url: string | URL, init?: RequestInit) => {\r\n try {\r\n const response = await fetchImpl(url, init);\r\n return await handleResponse(response); // This throws BrpcClientError if not ok\r\n } catch (error) {\r\n // If already a BrpcClientError (from handleResponse), re-throw as-is\r\n if (error instanceof BrpcClientError) {\r\n throw error;\r\n }\r\n\r\n // Network errors - wrap them\r\n throw new BrpcClientError(\r\n error instanceof Error ? error.message : \"Network request failed\",\r\n 0,\r\n \"NETWORK_ERROR\",\r\n );\r\n }\r\n };\r\n\r\n // Create a proxy for a specific path\r\n const createProxy = (pathSegments: string[] = []): any => {\r\n return new Proxy(\r\n {},\r\n {\r\n get(_, key: string | symbol) {\r\n if (typeof key === \"symbol\") return undefined;\r\n\r\n // Special methods for procedures\r\n if (\r\n key === \"query\" ||\r\n key === \"mutation\" ||\r\n key === \"formMutation\" ||\r\n key === \"subscription\" ||\r\n key === \"getStringKey\" ||\r\n key === \"getArrayKey\" ||\r\n key === \"getNoInputsArrayKey\"\r\n ) {\r\n // The path up to this point is the procedure path\r\n const procedurePath = pathSegments.join(\"/\");\r\n const fullUrl = `${formattedBaseUrl}${proceduresPrefixedPath}/${procedurePath}`;\r\n\r\n if (debug) {\r\n console.log(`BRPC ${key} procedure path: ${procedurePath}`);\r\n console.log(`BRPC ${key} full URL: ${fullUrl}`);\r\n }\r\n\r\n if (key === \"query\") {\r\n return async (input: any) => {\r\n // Get fresh headers for this request\r\n const headers = await resolveHeaders(true);\r\n\r\n if (debug) {\r\n console.log(`BRPC query request to ${procedurePath}`, {\r\n input,\r\n headers,\r\n });\r\n }\r\n\r\n const url = new URL(fullUrl);\r\n\r\n // Add input parameters to URL for GET request\r\n if (input && typeof input === \"object\") {\r\n Object.entries(input).forEach(([k, v]) => {\r\n if (v !== undefined) {\r\n url.searchParams.append(k, String(v));\r\n }\r\n });\r\n }\r\n\r\n const result = await safeFetch(url.toString(), {\r\n method: \"GET\",\r\n headers,\r\n credentials: \"include\", //always include credentials\r\n });\r\n\r\n if (debug) {\r\n console.log(\r\n `BRPC query response from ${procedurePath}:`,\r\n result,\r\n );\r\n }\r\n\r\n return result;\r\n };\r\n } else if (key === \"mutation\") {\r\n return async (input: any) => {\r\n // Get fresh headers for this request\r\n const headers = await resolveHeaders(true);\r\n\r\n if (debug) {\r\n console.log(`BRPC mutation request to ${procedurePath}`, {\r\n input,\r\n headers,\r\n });\r\n }\r\n\r\n const body = JSON.stringify(input);\r\n\r\n const result = await safeFetch(fullUrl, {\r\n method: \"POST\",\r\n headers,\r\n body,\r\n credentials: \"include\",\r\n });\r\n\r\n if (debug) {\r\n console.log(\r\n `BRPC mutation response from ${procedurePath}:`,\r\n result,\r\n );\r\n }\r\n\r\n return result;\r\n };\r\n } else if (key === \"formMutation\") {\r\n return async (input: Record<string, any>) => {\r\n // Get fresh headers for this request (no Content-Type for FormData)\r\n const headers = await resolveHeaders(false);\r\n\r\n if (debug) {\r\n console.log(`BRPC formMutation request to ${procedurePath}`, {\r\n input,\r\n headers,\r\n });\r\n }\r\n\r\n // Convert object input to FormData\r\n const formData = new FormData();\r\n\r\n // Helper function to append values to FormData\r\n const appendToFormData = (\r\n key: string,\r\n value: any,\r\n parentKey?: string,\r\n ) => {\r\n const fullKey = parentKey ? `${parentKey}[${key}]` : key;\r\n\r\n if (value === null || value === undefined) {\r\n // Skip null/undefined values\r\n return;\r\n } else if (value instanceof File || value instanceof Blob) {\r\n // Handle files directly\r\n formData.append(fullKey, value);\r\n } else if (Array.isArray(value)) {\r\n // Handle arrays\r\n value.forEach((item, index) => {\r\n if (item instanceof File || item instanceof Blob) {\r\n // ✅ Append files with the same key (not indexed)\r\n formData.append(fullKey, item);\r\n } else if (typeof item === \"object\" && item !== null) {\r\n Object.entries(item).forEach(([subKey, subValue]) => {\r\n appendToFormData(\r\n subKey,\r\n subValue,\r\n `${fullKey}[${index}]`,\r\n );\r\n });\r\n } else {\r\n formData.append(`${fullKey}[${index}]`, String(item));\r\n }\r\n });\r\n } else if (typeof value === \"object\" && value !== null) {\r\n // Handle nested objects\r\n Object.entries(value).forEach(([subKey, subValue]) => {\r\n appendToFormData(subKey, subValue, fullKey);\r\n });\r\n } else {\r\n // Handle primitive values\r\n formData.append(fullKey, String(value));\r\n }\r\n };\r\n\r\n // Convert input object to FormData\r\n Object.entries(input).forEach(([key, value]) => {\r\n appendToFormData(key, value);\r\n });\r\n\r\n const result = await safeFetch(fullUrl, {\r\n method: \"POST\",\r\n headers,\r\n body: formData,\r\n credentials: \"include\",\r\n });\r\n\r\n if (debug) {\r\n console.log(\r\n `BRPC formMutation response from ${procedurePath}:`,\r\n result,\r\n );\r\n }\r\n\r\n return result;\r\n };\r\n } else if (key === \"subscription\") {\r\n return (callback: (data: any) => void) => {\r\n if (debug) {\r\n console.log(`BRPC subscription to ${procedurePath}`);\r\n }\r\n\r\n // Use the same pattern as fullUrl for consistency\r\n const topicPath = proceduresPrefixedPath\r\n ? `${proceduresPrefixedPath.slice(1)}/${procedurePath}` // Remove leading /\r\n : procedurePath;\r\n\r\n // Update WebSocket auth if needed before subscribing\r\n wsManager.updateAuth();\r\n\r\n // Return an object with unsubscribe and publish methods\r\n return wsManager.subscribe(topicPath, callback);\r\n };\r\n } else if (key === \"getStringKey\") {\r\n return (input?: any) => {\r\n // Create a deterministic key based on procedure path and input\r\n const baseKey = procedurePath;\r\n\r\n if (!input || Object.keys(input).length === 0) {\r\n return baseKey;\r\n }\r\n\r\n // Sort input keys for deterministic key generation\r\n const sortedInput = Object.keys(input)\r\n .sort()\r\n .reduce(\r\n (result, key) => {\r\n const value = input[key];\r\n if (value !== undefined && value !== null) {\r\n result[key] = value;\r\n }\r\n return result;\r\n },\r\n {} as Record<string, any>,\r\n );\r\n\r\n // Only add input hash if there are actual values\r\n if (Object.keys(sortedInput).length === 0) {\r\n return baseKey;\r\n }\r\n\r\n // Create a simple hash from the sorted input\r\n const inputString = JSON.stringify(sortedInput);\r\n return `${baseKey}?${inputString}`;\r\n };\r\n } else if (key === \"getArrayKey\") {\r\n return (input?: any) => {\r\n // Use the full procedure path as the first segment for easier invalidation\r\n const basePath = procedurePath;\r\n\r\n if (!input || Object.keys(input).length === 0) {\r\n return [basePath];\r\n }\r\n\r\n // Normalize and sort input keys for deterministic key generation\r\n const normalizedPairs: Array<[string, any]> = [];\r\n\r\n Object.keys(input)\r\n .sort()\r\n .forEach((key) => {\r\n const value = input[key];\r\n if (value !== undefined && value !== null) {\r\n // Normalize values for consistent comparison\r\n let normalizedValue = value;\r\n\r\n // Convert primitives to strings for consistency\r\n if (\r\n typeof value === \"boolean\" ||\r\n typeof value === \"number\"\r\n ) {\r\n normalizedValue = String(value);\r\n } else if (typeof value === \"object\") {\r\n // For objects/arrays, use JSON representation\r\n normalizedValue = JSON.stringify(value);\r\n }\r\n\r\n normalizedPairs.push([key, normalizedValue]);\r\n }\r\n });\r\n\r\n // Only add input segments if there are actual values\r\n if (normalizedPairs.length === 0) {\r\n return [basePath];\r\n }\r\n\r\n // Create individual segments for each input pair\r\n // This allows for better pattern matching\r\n const inputSegments = normalizedPairs.flatMap(\r\n ([key, value]) => [key, value],\r\n );\r\n\r\n return [basePath, ...inputSegments];\r\n };\r\n } else if (key === \"getNoInputsArrayKey\") {\r\n return () => {\r\n // Always return just the procedure path, ignoring any inputs\r\n // Perfect for invalidating all variants of a procedure\r\n return [procedurePath];\r\n };\r\n }\r\n }\r\n\r\n // Continue traversing the path for nested routes\r\n return createProxy([...pathSegments, key]);\r\n },\r\n },\r\n );\r\n };\r\n\r\n // Create the base proxy\r\n const clientProxy = createProxy() as InferClientRoutes<TRoutesStructure>;\r\n\r\n if (debug) {\r\n console.log(\"BRPC client created\", {\r\n baseUrl: formattedBaseUrl,\r\n prefix: proceduresPrefixedPath,\r\n wsUrl: wsUrl,\r\n });\r\n }\r\n\r\n return {\r\n routes: clientProxy,\r\n\r\n storage: {\r\n getObjectUrl: (storageObject, opts) =>\r\n getObjectUrl(storageObject, opts, s3Endpoint!),\r\n },\r\n\r\n utils: {\r\n updateWsAuth: async () => await wsManager.updateAuth(),\r\n\r\n setHeader: async (key: string, value: string) => {\r\n if (typeof currentHeaders === \"function\") {\r\n console.warn(\r\n \"Cannot use setHeader with function-based headers resolver\",\r\n );\r\n return;\r\n }\r\n currentHeaders = { ...currentHeaders, [key]: value };\r\n await wsManager.updateAuth();\r\n },\r\n\r\n setHeaders: async (headers: Record<string, string>) => {\r\n if (typeof currentHeaders === \"function\") {\r\n console.warn(\r\n \"Cannot use setHeaders with function-based headers resolver\",\r\n );\r\n return;\r\n }\r\n currentHeaders = { ...currentHeaders, ...headers };\r\n await wsManager.updateAuth();\r\n },\r\n },\r\n };\r\n}\r\n"
10
10
  ],
11
- "mappings": "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",
12
- "debugId": "B93CAD61847F968E64756E2164756E21",
11
+ "mappings": "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",
12
+ "debugId": "973A07DA47C3294664756E2164756E21",
13
13
  "names": []
14
14
  }
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- import{useCallback as z,useEffect as A,useRef as B}from"react";function G(j,q){let m=B(null);return A(()=>{let{publish:x,unsubscribe:w}=j(q||((y)=>console.log("New data received",y)));return m.current=x,()=>{m.current=null,w()}},[j,q]),{publish:z((x)=>{m.current?.(x)},[])}}export{G as useSubscription};
2
+ import{useCallback,useEffect,useRef}from"react";function useSubscription(subscription,callback){let publishRef=useRef(null);return useEffect(()=>{let{publish,unsubscribe}=subscription(callback||((data)=>console.log("New data received",data)));return publishRef.current=publish,()=>{publishRef.current=null,unsubscribe()}},[subscription,callback]),{publish:useCallback((data)=>{publishRef.current?.(data)},[])}}export{useSubscription};
3
3
 
4
- //# debugId=12418FDC428A9F4964756E2164756E21
4
+ //# debugId=2F187EC271CD675764756E2164756E21
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "import { useCallback, useEffect, useRef } from \"react\";\r\n\r\n/**\r\n * Custom hook for managing brpc subscriptions\r\n * @param subscription A function that sets up a subscription and returns publish/unsubscribe handlers\r\n * @param callback Optional callback function to handle incoming data\r\n * @returns A stable publish function that can be called directly\r\n */\r\nfunction useSubscription<TInput, TOutput>(\r\n subscription: (callback: (data: TOutput) => void) => {\r\n publish: (data: TInput) => void;\r\n unsubscribe: () => void;\r\n },\r\n callback?: (data: TOutput) => void\r\n) {\r\n // Create a ref to store the publish function\r\n const publishRef = useRef<((data: TInput) => void) | null>(null);\r\n\r\n useEffect(() => {\r\n // Set up the subscription with the provided or default callback\r\n const { publish, unsubscribe } = subscription(\r\n callback || ((data) => console.log(\"New data received\", data))\r\n );\r\n\r\n // Store the publish function in the ref\r\n publishRef.current = publish;\r\n\r\n // Clean up the subscription when the component unmounts\r\n return () => {\r\n publishRef.current = null;\r\n unsubscribe();\r\n };\r\n }, [subscription, callback]);\r\n\r\n // Create a stable function that delegates to the current ref value\r\n const stablePublish = useCallback((data: TInput) => {\r\n publishRef.current?.(data);\r\n }, []);\r\n\r\n return { publish: stablePublish };\r\n}\r\n\r\nexport { useSubscription };\r\n"
6
6
  ],
7
- "mappings": ";AAAA,sBAAS,eAAa,YAAW,cAQjC,SAAS,CAAgC,CACvC,EAIA,EACA,CAEA,IAAM,EAAa,EAAwC,IAAI,EAuB/D,OArBA,EAAU,IAAM,CAEd,IAAQ,UAAS,eAAgB,EAC/B,IAAa,CAAC,IAAS,QAAQ,IAAI,oBAAqB,CAAI,EAC9D,EAMA,OAHA,EAAW,QAAU,EAGd,IAAM,CACX,EAAW,QAAU,KACrB,EAAY,IAEb,CAAC,EAAc,CAAQ,CAAC,EAOpB,CAAE,QAJa,EAAY,CAAC,IAAiB,CAClD,EAAW,UAAU,CAAI,GACxB,CAAC,CAAC,CAE2B",
8
- "debugId": "12418FDC428A9F4964756E2164756E21",
7
+ "mappings": ";AAAA,gDAQA,SAAS,eAAgC,CACvC,aAIA,SACA,CAEA,IAAM,WAAa,OAAwC,IAAI,EAuB/D,OArBA,UAAU,IAAM,CAEd,IAAQ,QAAS,aAAgB,aAC/B,WAAa,CAAC,OAAS,QAAQ,IAAI,oBAAqB,IAAI,EAC9D,EAMA,OAHA,WAAW,QAAU,QAGd,IAAM,CACX,WAAW,QAAU,KACrB,YAAY,IAEb,CAAC,aAAc,QAAQ,CAAC,EAOpB,CAAE,QAJa,YAAY,CAAC,OAAiB,CAClD,WAAW,UAAU,IAAI,GACxB,CAAC,CAAC,CAE2B",
8
+ "debugId": "2F187EC271CD675764756E2164756E21",
9
9
  "names": []
10
10
  }
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // @bun
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
2
+ import{z}from"zod";class ProcedureBuilder{middlewares=[];constructor(middlewares=[]){this.middlewares=middlewares}use(middleware){return new ProcedureBuilder([...this.middlewares,middleware])}input(schema){return new InputProcedureBuilder(this.middlewares,schema)}query(handler){return{_input:z.object({}),_output:null,_ctx:null,_type:"query",handler,middlewares:this.middlewares}}mutation(handler){return{_input:z.object({}),_output:null,_ctx:null,_type:"mutation",handler,middlewares:this.middlewares}}formMutation(handler){return{_input:z.object({}),_output:null,_ctx:null,_type:"formMutation",handler,middlewares:this.middlewares}}subscription(handler){return{_input:z.object({}),_output:null,_ctx:null,_type:"subscription",handler,middlewares:this.middlewares}}file(handler){return{_input:z.object({}),_output:null,_ctx:null,_type:"file",handler,middlewares:this.middlewares}}fileStream(handler){return{_input:z.object({}),_output:null,_ctx:null,_type:"fileStream",handler,middlewares:this.middlewares}}html(handler){return{_input:z.object({}),_output:null,_ctx:null,_type:"html",handler,middlewares:this.middlewares}}}class InputProcedureBuilder{middlewares;inputSchema;timeoutMs;constructor(middlewares,inputSchema,timeoutMs){this.middlewares=middlewares;this.inputSchema=inputSchema;this.timeoutMs=timeoutMs}timeout(ms){return new InputProcedureBuilder(this.middlewares,this.inputSchema,ms)}query(handler){return{_input:this.inputSchema,_output:null,_ctx:null,_type:"query",_timeout:this.timeoutMs,handler,middlewares:this.middlewares}}mutation(handler){return{_input:this.inputSchema,_output:null,_ctx:null,_type:"mutation",_timeout:this.timeoutMs,handler,middlewares:this.middlewares}}formMutation(handler){return{_input:this.inputSchema,_output:null,_ctx:null,_type:"formMutation",_timeout:this.timeoutMs,handler,middlewares:this.middlewares}}subscription(handler){return{_input:this.inputSchema,_output:null,_ctx:null,_type:"subscription",_timeout:this.timeoutMs,handler,middlewares:this.middlewares}}file(handler){return{_input:this.inputSchema,_output:null,_ctx:null,_type:"file",_timeout:this.timeoutMs,handler,middlewares:this.middlewares}}fileStream(handler){return{_input:this.inputSchema,_output:null,_ctx:null,_type:"fileStream",_timeout:this.timeoutMs,handler,middlewares:this.middlewares}}html(handler){return{_input:z.object({}),_output:null,_ctx:null,_type:"html",_timeout:this.timeoutMs,handler,middlewares:this.middlewares}}}function createProcedure(_context){return new ProcedureBuilder}import{ZodError}from"zod";class BRPCError 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(options){super(options.message);if(this.name="BRPCError",this.code=options.code,this.clientCode=options.clientCode,this.httpStatus=BRPCError.STATUS_MAP[options.code],this.data=options.data,this.cause=options.cause,Error.captureStackTrace)Error.captureStackTrace(this,BRPCError)}toJSON(){return{name:this.name,code:this.code,clientCode:this.clientCode,message:this.message,data:this.data,httpStatus:this.httpStatus}}static badRequest(message,clientCode,data){return new BRPCError({code:"BAD_REQUEST",message,clientCode,data})}static unauthorized(message="Unauthorized",clientCode,data){return new BRPCError({code:"UNAUTHORIZED",message,clientCode,data})}static forbidden(message="Forbidden",clientCode,data){return new BRPCError({code:"FORBIDDEN",message,clientCode,data})}static notFound(message="Not Found",clientCode,data){return new BRPCError({code:"NOT_FOUND",message,clientCode,data})}static preconditionFailed(message="Precondition failed",clientCode,data){return new BRPCError({code:"NOT_FOUND",message,clientCode,data})}static conflict(message,clientCode,data){return new BRPCError({code:"CONFLICT",message,clientCode,data})}static unprocessableContent(message,clientCode,data){return new BRPCError({code:"UNPROCESSABLE_CONTENT",message,clientCode,data})}static tooManyRequests(message="Too many requests",clientCode,data){return new BRPCError({code:"TOO_MANY_REQUESTS",message,clientCode,data})}static internalServerError(message="Internal Server Error",clientCode,data){return new BRPCError({code:"INTERNAL_SERVER_ERROR",message,clientCode,data})}static timeout(message="Request timeout",clientCode,data){return new BRPCError({code:"TIMEOUT",message,clientCode,data})}}class RouteMatcher{routeTree;routeCache;options;routeStats;constructor(routes,options={}){if(this.options={enableCaching:!0,maxCacheSize:1000,debug:!1,...options},this.routeCache=new Map,this.routeStats=this.analyzeRoutes(routes),this.routeTree=this.compileRoutes(routes),this.options.debug)console.log("[ROUTEMATCHER]","initialized with stats:",this.routeStats)}match(pathParts){if(this.options.enableCaching)return this.matchWithCache(pathParts);return this.matchDirect(pathParts)}matchWithCache(pathParts){let cacheKey=pathParts.join("/");if(this.routeCache.has(cacheKey)){let cached=this.routeCache.get(cacheKey);if(this.options.debug&&cached)console.log("[ROUTEMATCHER]",`\uD83C\uDFAF Cache hit for route: /${cacheKey}`);return cached}let result=this.matchDirect(pathParts);if(this.cacheResult(cacheKey,result),this.options.debug)console.log("[ROUTEMATCHER]",`\uD83D\uDCBE Cached route: /${cacheKey} -> ${result?"found":"not found"}`);return result}matchDirect(pathParts){let startTime=this.options.debug?performance.now():0,result=this.traverseTree(this.routeTree,pathParts,0,{});if(this.options.debug){let duration=performance.now()-startTime,routeType=result?.route._type||"none";console.log("[ROUTEMATCHER]",`\u26A1 Route match: /${pathParts.join("/")} (${routeType}) took ${duration.toFixed(3)}ms`)}return result}traverseTree(node,pathParts,index,params){if(index>=pathParts.length){if(node.handler)return{params,route:node.handler.handler};if(node.index)return{params,route:node.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(node.wildcard&&pathParts.length===0)return{params:{...params,wildcardPath:""},route:node.wildcard.handler};return null}let segment=pathParts[index],decodedSegment=decodeURIComponent(segment),staticChild=node.static.get(decodedSegment);if(staticChild){let result=this.traverseTree(staticChild,pathParts,index+1,params);if(result)return result}if(node.param){let newParams={...params,[node.param.name]:decodedSegment},result=this.traverseTree(node.param.node,pathParts,index+1,newParams);if(result)return result}if(node.wildcard){let wildcardPath=pathParts.slice(index).join("/");return{params:{...params,wildcardPath},route:node.wildcard.handler}}return null}compileRoutes(routes,paramNames=[]){let node={static:new Map};for(let[key,value]of Object.entries(routes)){if(key==="index"&&this.isProcedure(value)){node.index={handler:value,paramNames:[...paramNames],hasWildcard:!1};continue}if(key==="*"){if(this.isProcedure(value))node.wildcard={handler:value,paramNames:[...paramNames,"wildcardPath"],hasWildcard:!0,wildcardIndex:paramNames.length};continue}if(this.isProcedure(value)){let compiledRoute={handler:value,paramNames:[...paramNames],hasWildcard:!1};if(key.startsWith(":")){let paramName=key.slice(1),terminalNode={static:new Map,handler:compiledRoute};node.param={name:paramName,node:terminalNode}}else{let terminalNode={static:new Map,handler:compiledRoute};node.static.set(key,terminalNode)}}else if(typeof value==="object"&&value!==null)if(key.startsWith(":")){let paramName=key.slice(1),childNode=this.compileRoutes(value,[...paramNames,paramName]);node.param={name:paramName,node:childNode}}else{let childNode=this.compileRoutes(value,paramNames);node.static.set(key,childNode)}}return node}isProcedure(value){return value&&typeof value==="object"&&"_type"in value&&"_input"in value}cacheResult(key,result){if(this.routeCache.size>=this.options.maxCacheSize){let firstKey=this.routeCache.keys().next().value;if(firstKey!==void 0){if(this.routeCache.delete(firstKey),this.options.debug)console.log(`\uD83D\uDDD1\uFE0F Evicted oldest cache entry: ${firstKey}`)}}this.routeCache.set(key,result)}analyzeRoutes(routes){let stats={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}},traverse=(obj,depth=0)=>{stats.maxDepth=Math.max(stats.maxDepth,depth);for(let[key,value]of Object.entries(obj))if(this.isProcedure(value)){if(stats.totalRoutes++,value._type in stats.procedureTypes)stats.procedureTypes[value._type]++;if(key==="index")stats.indexRoutes++;else if(key.startsWith(":"))stats.paramRoutes++;else if(key==="*")stats.wildcardRoutes++;else stats.staticRoutes++}else if(typeof value==="object"&&value!==null)traverse(value,depth+1)};return traverse(routes),stats}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 suggestions=[],{routeStats}=this;if(routeStats.paramRoutes>routeStats.staticRoutes*2)suggestions.push("\uD83D\uDE80 Consider grouping routes to reduce parameter route overhead");if(routeStats.maxDepth>6)suggestions.push("\uD83D\uDCCA Deep route nesting detected - consider flattening some routes");if(routeStats.totalRoutes>200)suggestions.push("\u26A1 Large route table - consider route splitting or lazy loading");if(!this.options.enableCaching&&routeStats.totalRoutes>50)suggestions.push("\uD83D\uDCBE Enable caching for better performance with many routes");if(routeStats.procedureTypes.file>20)suggestions.push("\uD83D\uDCC1 Many file routes detected - consider static file serving");if(routeStats.procedureTypes.subscription>10)suggestions.push("\uD83D\uDD04 Many subscription routes - ensure WebSocket optimization");return suggestions}findRoutesByPattern(_pattern){return[]}getRouteInfo(path){let pathParts=path.split("/").filter(Boolean),cacheKey=pathParts.join("/"),cached=this.routeCache.has(cacheKey),startTime=performance.now(),result=this.matchDirect(pathParts),matchTime=performance.now()-startTime;return{found:!!result,route:result?.route,params:result?.params,cached,matchTime}}benchmark(testPaths,iterations=1000){let pathSegments=testPaths.map((path)=>path.split("/").filter(Boolean)),originalCache=new Map(this.routeCache);this.routeCache.clear();let startTime=performance.now();for(let i=0;i<iterations;i++)for(let segments of pathSegments)this.matchDirect(segments);let totalTime=performance.now()-startTime,totalMatches=iterations*testPaths.length,averageTime=totalTime/totalMatches,routesPerSecond=totalMatches/totalTime*1000;return this.routeCache=originalCache,{averageTime,totalTime,routesPerSecond}}warmupCache(commonPaths){if(!this.options.enableCaching)return;let startTime=performance.now(),warmedRoutes=0;for(let path of commonPaths){let pathParts=path.split("/").filter(Boolean),result=this.matchDirect(pathParts);if(result)this.cacheResult(pathParts.join("/"),result),warmedRoutes++}let endTime=performance.now();if(this.options.debug)console.log("[ROUTEMATCHER]",`\uD83D\uDD25 Cache warmed up: ${warmedRoutes} routes in ${(endTime-startTime).toFixed(2)}ms`)}}var L=import.meta.require,W={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 J(k){return W[k]}var Y={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 V(k){return Y[k]||"application/octet-stream"}function Z(k){if(typeof Bun<"u"&&Bun.hash)return Bun.hash(k).toString(16);try{let z2=L("crypto"),K;if(typeof k==="string")K=Buffer.from(k);else if(k instanceof ArrayBuffer)K=Buffer.from(new Uint8Array(k));else K=Buffer.from(k);return z2.createHash("md5").update(K).digest("hex")}catch{let z2=typeof k==="string"?new TextEncoder().encode(k):k instanceof ArrayBuffer?new Uint8Array(k):k,K=0;for(let U=0;U<z2.length;U++)K=(K<<5)-K+z2[U],K=K&K;return Math.abs(K).toString(16).padStart(16,"0")}}function B(k,z2,K){let U=k.headers.get("Origin"),D=!0;if((K?.allowAll??!0)&&U)return U;if(z2.length===0)return U||"*";if(!U)return z2[0];if(z2.includes(U))return U;return z2[0]}class ${headers={};contentType(k){return this.headers["Content-Type"]=V(k),this}filePath(k){let z2=k.split(".").pop()?.toLowerCase()||"";return this.headers["Content-Type"]=V(z2),this}mimeType(k){return this.headers["Content-Type"]=k,this}cache(k){let{cacheControl:z2,expires:K}=J(k);if(this.headers["Cache-Control"]=z2,K)this.headers.Expires=K;return this}eTag(k){if(!k)return this;let z2;if(typeof k==="string"&&k.startsWith('"'))z2=k;else z2=`"${Z(k)}"`;return this.headers.ETag=z2,this}lastModified(k){return this.headers["Last-Modified"]=k.toUTCString(),this}contentLength(k){return this.headers["Content-Length"]=k.toString(),this}redirect(k,z2=!1){return this.headers.Location=k,this.headers["X-Redirect-Type"]=z2?"permanent":"temporary",this}cors({origin:k="*",methods:z2=["GET","POST","PUT","DELETE","OPTIONS"],headers:K=["Content-Type","Authorization"],maxAge:U=86400,credentials:D}={}){let X=D??k!=="*";if(X&&k==="*")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"]=k,this.headers["Access-Control-Allow-Methods"]=z2.join(", "),this.headers["Access-Control-Allow-Headers"]=K.join(", "),X)this.headers["Access-Control-Allow-Credentials"]="true";return this.headers["Access-Control-Max-Age"]=U.toString(),this}security(k){let z2={hsts:!0,noSniff:!0,frameOptions:"SAMEORIGIN",xssProtection:!0,...k};if(z2.csp)this.headers["Content-Security-Policy"]=z2.csp;if(z2.hsts){let K=typeof z2.hsts==="number"?z2.hsts:31536000;this.headers["Strict-Transport-Security"]=`max-age=${K}; includeSubDomains`}if(z2.noSniff)this.headers["X-Content-Type-Options"]="nosniff";if(z2.frameOptions)this.headers["X-Frame-Options"]=z2.frameOptions;if(z2.xssProtection)this.headers["X-XSS-Protection"]="1; mode=block";return this}custom(k,z2){return this.headers[k]=z2,this}customHeaders(k){return Object.assign(this.headers,k),this}vary(...k){let z2=this.headers.Vary,K=z2?`${z2}, ${k.join(", ")}`:k.join(", ");return this.headers.Vary=K,this}compress(k){if(k)this.headers["Content-Encoding"]=k;return this}build(k){let z2={...this.headers};if(k&&!z2["Content-Length"]){let K=typeof k==="string"?new TextEncoder().encode(k).length:k.byteLength;z2["Content-Length"]=K.toString()}return z2}buildHeaders(k){return new Headers(this.build(k))}}function Q(){return new $}function F(k,z2){let K=Q().contentType(k);if(z2)K.cache(z2);return K.build()}var G={css:(k)=>Q().contentType("css").cache("STYLESHEET").eTag(k),javascript:(k)=>Q().contentType("javascript").cache("JAVASCRIPT").eTag(k),hashedAsset:(k,z2)=>Q().filePath(k).cache("HASHED_ASSET").eTag(z2),font:(k)=>Q().filePath(k).cache("FONT").cors({origin:"*"}),image:(k)=>Q().filePath(k).cache("IMAGE"),favicon:()=>Q().contentType("icon").cache("FAVICON"),api:()=>Q().contentType("json").cache("API_RESPONSE").cors(),expensiveApi:(k)=>Q().contentType("json").cache("API_RESPONSE").cors().eTag(k),realtime:()=>Q().contentType("json").cache("NO_CACHE").cors(),html:()=>Q().contentType("html").cache("HTML_PAGE").security(),expensiveHtml:(k)=>Q().contentType("html").cache("HTML_PAGE").security().eTag(k),manifest:(k)=>Q().contentType("json").cache("MANIFEST").eTag(k),serviceWorker:()=>Q().contentType("javascript").cache("SERVICE_WORKER"),sitemap:(k)=>Q().contentType("xml").cache("SITEMAP").eTag(k),feed:(k,z2="rss")=>Q().contentType("xml").cache("FEED").eTag(k).mimeType(z2==="rss"?"application/rss+xml":"application/atom+xml"),video:(k)=>Q().filePath(k).cache("MEDIA_STREAM").custom("Accept-Ranges","bytes"),audio:(k)=>Q().filePath(k).cache("MEDIA_STREAM").custom("Accept-Ranges","bytes"),pdf:(k)=>Q().contentType("pdf").cache("DOCUMENT").custom("Content-Disposition","inline").eTag(k),download:(k,z2,K)=>Q().filePath(z2).cache("ARCHIVE").custom("Content-Disposition",`attachment; filename="${k}"`).eTag(K),secure:()=>Q().security({csp:"default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'",hsts:31536000}).custom("X-Powered-By","Bun"),permanentRedirect:(k)=>Q().redirect(k,!0),temporaryRedirect:(k)=>Q().redirect(k,!1)};async function streamMediaInternal(file,request,allowedOrigins,options={}){let{maxChunkSize=2097152,cacheMaxAge=3600,acceptedExtensions}=options;if(!await file.exists())return new Response("Media file not found",{status:404,headers:Q().contentType("text").cors({origin:B(request,allowedOrigins)}).build()});if(acceptedExtensions&&acceptedExtensions.length>0){let ext=file.name?.toLowerCase().split(".").pop();if(!ext||!acceptedExtensions.includes(ext))return new Response("File type not supported",{status:415,headers:Q().contentType("text").cors({origin:B(request,allowedOrigins)}).build()})}let fileSize=file.size,range=request.headers.get("Range");if(!range)return new Response(file,{headers:Q().filePath(file.name||"media").custom("Accept-Ranges","bytes").custom("Cache-Control",`public, max-age=${cacheMaxAge}`).cors({origin:B(request,allowedOrigins)}).build()});let rangeMatch=range.match(/bytes=(\d*)-(\d*)/);if(!rangeMatch)return new Response("Invalid Range header",{status:416,headers:Q().contentType("text").cors({origin:B(request,allowedOrigins)}).custom("Content-Range",`bytes */${fileSize}`).build()});let start=rangeMatch[1]?parseInt(rangeMatch[1]):0,requestedEnd=rangeMatch[2]?parseInt(rangeMatch[2]):fileSize-1,end=Math.min(requestedEnd,start+maxChunkSize-1,fileSize-1);if(start>=fileSize||end>=fileSize||start>end)return new Response("Range not satisfiable",{status:416,headers:Q().contentType("text").cors({origin:B(request,allowedOrigins)}).custom("Content-Range",`bytes */${fileSize}`).build()});return new Response(file.slice(start,end+1),{status:206,headers:Q().filePath(file.name||"media").custom("Accept-Ranges","bytes").custom("Cache-Control",`public, max-age=${cacheMaxAge}`).cors({origin:B(request,allowedOrigins)}).build()})}function streamMedia(file,request,options){return{type:"stream",file,request,options}}class Router{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(config){if(this.contextCreator=config.context,this.prefix=config.prefix??"",this.routes=config.routes,this.globalMiddlewares=config.globalMiddlewares??[],this.wsConfig=config.websocket??{},this.integrations=config.integrations,this.debug=!!config.debug&&!0,this.onError=config.onError,this.routeMatcher=new RouteMatcher(config.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(pathParts){return this.routeMatcher.match(pathParts)}async parseInput(req,schema,routeType){let input={},url=new URL(req.url),queryParams=Object.fromEntries(url.searchParams),method=req.method;if(method==="POST"){if(parseInt(req.headers.get("content-length")||"0")>this.maxRequestSize)throw Error("Request payload too large")}if(method==="GET"&&["query","streamQuery","file","fileStream","html"].includes(routeType))input=queryParams;else if(method==="POST"&&["mutation","formMutation","streamMutation"].includes(routeType)){let contentType=req.headers.get("content-type");if(contentType?.includes("application/json"))input=await req.json();else if(contentType?.includes("multipart/form-data")){let formData=await req.formData();input=await this.parseFormData(formData)}else throw Error("Unsupported content type")}else throw Error(`Unsupported request method ${method} for procedure type ${routeType}`);return schema.parse(input)}async parseFormData(formData){let result={},fileGroups={};formData.forEach(async(value,key)=>{if(value instanceof File){if(!fileGroups[key])fileGroups[key]=[];fileGroups[key].push(value)}else if(typeof value==="string")try{result[key]=JSON.parse(value)}catch{result[key]=value}});for(let[key,files]of Object.entries(fileGroups))result[key]=files;return result}handleError(error,req){if(this.onError)try{this.onError(error,{req,route:req.url})}catch(logError){console.error("Error logger failed:",logError)}if(error?.errors&&Array.isArray(error.errors)&&error.name==="ZodError")return new Response(JSON.stringify({error:{name:"ValidationError",code:"BAD_REQUEST",clientCode:"VALIDATION_ERROR",message:"Input validation failed",data:{validationErrors:error.errors.map((err)=>({path:err.path.join("."),message:err.message,code:err.code,received:err.received}))},httpStatus:400}}),{status:400,headers:Q().contentType("json").cors({origin:B(req,this.allowedOrigins)}).build()});if(error instanceof BRPCError)return new Response(JSON.stringify({error:error.toJSON()}),{status:error.httpStatus,headers:Q().contentType("json").cors({origin:B(req,this.allowedOrigins)}).build()});if(error instanceof Error){let status=error.message==="Not Found"?404:error.message==="Unauthorized"?401:error.message==="Forbidden"?403:error.message==="Request payload too large"?413:error.message==="Request timeout"?504:500,errorCode=status===404?"NOT_FOUND":status===401?"UNAUTHORIZED":status===403?"FORBIDDEN":status===413?"PAYLOAD_TOO_LARGE":status===504?"GATEWAY_TIMEOUT":"INTERNAL_SERVER_ERROR",clientMessage=status<500?error.message:"Internal Server Error";return new Response(JSON.stringify({error:{code:errorCode,message:clientMessage}}),{status,headers:Q().contentType("json").cors({origin:B(req,this.allowedOrigins)}).build()})}return new Response(JSON.stringify({error:{code:"INTERNAL_SERVER_ERROR",message:"Internal Server Error"}}),{status:500,headers:Q().contentType("json").cors({origin:B(req,this.allowedOrigins)}).build()})}handleFileCacheControl(contentType){let cacheControl;if(contentType?.includes("text/html"))cacheControl="public, max-age=0, must-revalidate";else if(contentType?.includes("text/css")||contentType?.includes("text/javascript")||contentType?.includes("application/javascript"))cacheControl="public, max-age=31536000, immutable";else cacheControl="public, max-age=86400, stale-while-revalidate=604800";return cacheControl}async handleRequest(req,server){try{if(req.method==="OPTIONS")return new Response(null,{status:204,headers:Q().cors({origin:B(req,this.allowedOrigins)}).build()});let path=new URL(req.url).pathname;if(path=path.startsWith(this.prefix)?path.slice(this.prefix.length):path,path=path.startsWith("/")?path:"/"+path,path==="/ws"&&server){if(this.debug)console.log("\uD83D\uDD0C WebSocket upgrade requested");return this.handleWebSocketUpgrade(req,server)}let pathParts=path==="/"?[]:path.split("/").filter(Boolean),routeResult=this.findRoute(pathParts);if(!routeResult)return new Response("Not Found",{status:404,headers:Q().contentType("text").cors({origin:B(req,this.allowedOrigins)}).build()});let{route}=routeResult,timeout=route._timeout??this.requestTimeout,timeoutPromise=new Promise((_,reject)=>{setTimeout(()=>reject(Error("Request timeout")),timeout)});return await Promise.race([this._handleRequest(req,server,routeResult),timeoutPromise])}catch(error){return this.handleError(error,req)}}async _handleRequest(req,server,routeResult){try{if(!routeResult)return new Response("Not Found",{status:404,headers:Q().contentType("text").cors({origin:B(req,this.allowedOrigins)}).build()});let{params,route}=routeResult;if(!route.handler)return new Response("Handler not implemented",{status:501,headers:Q().contentType("text").cors({origin:B(req,this.allowedOrigins)}).build()});let customHeaders=new Headers,ctx=await this.contextCreator(req);Object.assign(ctx,{req,params,publishToProcedure:async(procedure,input2,params2)=>{await this.publishToProcedure(procedure,input2,ctx,params2)},headers:customHeaders});for(let middleware of this.globalMiddlewares){let ext=await middleware(ctx);if(ext!==null&&ext!==void 0&&typeof ext==="object")Object.assign(ctx,ext)}for(let middleware of route.middlewares){let ext=await middleware(ctx);if(ext!==null&&ext!==void 0&&typeof ext==="object")Object.assign(ctx,ext)}let input=await this.parseInput(req,route._input,route._type),result=await route.handler({ctx,input}),corsHeaders=Q().cors({origin:B(req,this.allowedOrigins)}).build();return Object.keys(corsHeaders).forEach((key)=>{customHeaders.set(key,corsHeaders[key])}),await this.handleProcedureResponse(route._type,result,customHeaders)}catch(error){return this.handleError(error,req)}}async testRequest(req){return this.handleRequest(req)}async handleProcedureResponse(procedureType,result,customHeaders){switch(procedureType){case"file":if(result instanceof Response)return result;let contentType=result.type;return customHeaders.append("Content-Type",contentType),customHeaders.append("Cache-Control",this.development?"public, max-age=0, must-revalidate":this.handleFileCacheControl(contentType)),new Response(result,{headers:customHeaders});case"fileStream":if(typeof result==="object"&&result!==null&&"type"in result&&result.type==="stream"){let mediaStreamResult=result;return await streamMediaInternal(result.file,result.request,this.allowedOrigins,mediaStreamResult.options)}let streamContentType=result.type;return customHeaders.append("Content-Type",streamContentType),customHeaders.append("Cache-Control",this.development?"public, max-age=0, must-revalidate":this.handleFileCacheControl(streamContentType)),new Response(result,{headers:customHeaders});case"html":if(typeof result==="string")return customHeaders.append("Content-Type","text/html"),new Response(result,{headers:customHeaders});break;case"query":case"mutation":case"formMutation":case"streamQuery":case"streamMutation":case"subscription":default:return customHeaders.append("Content-Type","application/json"),new Response(JSON.stringify({data:result}),{headers:customHeaders})}return customHeaders.append("Content-Type","application/json"),new Response(JSON.stringify({data:result}),{headers:customHeaders})}cleanupStaleConnections(){let now=Date.now();for(let ws of this.activeConnections)if(now-ws.data.lastActivity>this.connectionTimeout)ws.close(),this.activeConnections.delete(ws)}async handleWebSocketUpgrade(req,server){if(this.activeConnections.size>=this.maxConnections)return new Response("Too many connections",{status:503});let ctx=await this.contextCreator(req);Object.assign(ctx,{req});for(let middleware of this.globalMiddlewares){let ext=await middleware(ctx);if(ext!==null&&ext!==void 0&&typeof ext==="object")Object.assign(ctx,ext)}if(server.upgrade(req,{data:{ctx,topics:new Set,lastActivity:Date.now()}}))return new Response(null,{status:101});return new Response("WebSocket upgrade failed",{status:500})}async handleAuthenticate(ws,token,_ctx){try{let finalToken=token.startsWith("Bearer ")?token.substring(7):token;if(ws.data.ctx.authToken=finalToken,ws.send(JSON.stringify({type:"auth_success",message:"Authentication successful"})),this.debug)console.log("[BRPC]","WebSocket authenticated successfully")}catch(error){if(ws.send(JSON.stringify({type:"auth_error",error:error instanceof Error?error.message:"Authentication failed"})),this.debug)console.error("WebSocket authentication error:",error)}}async handleSubscribe(ws,topic,_ctx){let routeResult=this.findRoute(topic.split("/").filter(Boolean));if(!routeResult||routeResult.route._type!=="subscription")throw Error("Invalid subscription route");ws.subscribe(topic),ws.data.topics.add(topic)}async handleUnsubscribe(ws,topic,_ctx){let routeResult=this.findRoute(topic.split("/").filter(Boolean));if(!routeResult||routeResult.route._type!=="subscription")throw Error("Invalid subscription route");ws.unsubscribe(topic),ws.data.topics.delete(topic)}async handlePublish(_ws,topic,message,ctx){let routeResult=this.findRoute(topic.split("/").filter(Boolean));if(!routeResult)throw Error("Subscription not found");let{params,route}=routeResult;if(route._type!=="subscription"||!route.handler)throw Error("Invalid subscription route");Object.assign(ctx,{params});let validatedMessage=route._input.fields?route._input.parse(message):message,publishMessage=await route.handler({ctx,input:validatedMessage}),converted={topic,data:publishMessage,type:"publish"};if(this.debug)console.log(`Server will publish to ${topic}`,converted);this.server.publish(topic,JSON.stringify(converted))}async publishToProcedure(procedure,input,ctx,params){if(procedure._type!=="subscription"||!procedure.handler)throw Error("Can only publish to subscription procedures");let routePath=this.findRoutePath(this.routes,procedure);if(!routePath)throw Error("Subscription route not found");let finalPath=routePath.split("/").map((part)=>{if(part.startsWith(":")){let paramName=part.slice(1),paramValue=params[paramName];if(!paramValue)throw Error(`Missing parameter: ${paramName}`);return paramValue}return part}).join("/"),result=await procedure.handler({ctx:{...ctx,params},input}),converted={topic:finalPath,data:result,type:"publish"};if(this.debug)console.log(`Server will publish to ${finalPath}`,converted);return this.server?.publish(finalPath,JSON.stringify(converted)),result}async publish(procedure,input,params){if(procedure._type!=="subscription"||!procedure.handler)throw Error("Can only publish to subscription procedures");let routePath=this.findRoutePath(this.routes,procedure);if(!routePath)throw Error("Subscription route not found");let finalPath=routePath.split("/").map((part)=>{if(part.startsWith(":")){let paramName=part.slice(1),paramValue=params?params[paramName]:null;if(!paramValue)throw Error(`Missing parameter: ${paramName}`);return paramValue}return part}).join("/"),result=await procedure.handler({ctx:{params},input}),converted={topic:finalPath,data:result,type:"publish"};if(this.debug)console.log(`Server will publish to ${finalPath}`,converted);return this.server?.publish(finalPath,JSON.stringify(converted)),result}freePublish(topic,message){let converted={topic,data:message,type:"publish"};this.server?.publish(topic,JSON.stringify(converted))}findRoutePath(routes,targetProcedure,prefix=""){for(let[key,value]of Object.entries(routes)){let currentPath=prefix?`${prefix}/${key}`:key;if(value===targetProcedure)return currentPath;if(value&&typeof value==="object"&&!("_type"in value)){let found=this.findRoutePath(value,targetProcedure,currentPath);if(found)return found}}return null}getIntegrationRoutes(){if(!this.integrations)return;let routes={};if(this.integrations.betterAuth){let handler=this.integrations.betterAuth.handler;if(!handler)throw Error("Please provide a handler for betterAuth integration");routes["/api/auth/*"]=async(req)=>{return await handler(req)}}if(this.integrations.rawRoutes)Object.keys(this.integrations.rawRoutes).forEach((val)=>{routes[val]=this.integrations.rawRoutes[val]});return Object.keys(routes).length>0?routes: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(testPaths=["/users/123","/posts/456/comments"],iterations=1000){if(this.debug){let results=this.routeMatcher.benchmark(testPaths,iterations);return console.log("[ROUTEMATCHER]","Route matching benchmark:",results),results}}updateRoutes(newRoutes){if(this.development)this.routes=newRoutes,this.routeMatcher=new RouteMatcher(newRoutes,{enableCaching:!1,debug:this.debug}),console.log("[HMR]","Server Routes updated");else console.warn("Route updates are only allowed in development mode")}listen(port,callback){if(this.server=Bun.serve({port,routes:this.getIntegrationRoutes(),fetch:(req,server)=>this.handleRequest(req,server),websocket:{open:(ws)=>{if(this.activeConnections.add(ws),this.wsConfig?.onOpen)this.wsConfig.onOpen(ws,ws.data.ctx);if(this.debug)console.log("[BRPC]","WebSocket connection opened",{connections:this.activeConnections.size})},message:async(ws,message)=>{try{ws.data.lastActivity=Date.now();let{type,topic,token,data}=JSON.parse(message),ctx=ws.data.ctx;if(this.debug)console.log("[BRPC]","WebSocket message received:",{type,topic});switch(type){case"authenticate":await this.handleAuthenticate(ws,token,ctx);break;case"subscribe":await this.handleSubscribe(ws,topic,ctx);break;case"unsubscribe":await this.handleUnsubscribe(ws,topic,ctx);break;case"publish":await this.handlePublish(ws,topic,data,ctx);break;default:if(ws.send(JSON.stringify({error:"Unknown message type"})),this.debug)console.error("Unknown WebSocket message type:",type)}}catch(error){if(this.debug)console.error("[BRPC]","WebSocket message error:",error);if(error instanceof ZodError)ws.send(JSON.stringify({error:"Invalid message format"}));else if(error instanceof Error)ws.send(JSON.stringify({error:error.message}))}},close:(ws,code,reason)=>{if(this.activeConnections.delete(ws),ws.data.topics.forEach((topic)=>{ws.unsubscribe(topic)}),this.debug)console.log("[BRPC]","WebSocket connection closed",{code,reason,remainingConnections:this.activeConnections.size});if(this.wsConfig?.onClose)this.wsConfig.onClose(ws,code,reason,ws.data.ctx)}}}),callback)callback()}}function createRouter(config){return new Router(config)}function createContext(contextCreator){return contextCreator}import{z as z3}from"zod";var MIME_TYPES={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"]},convertToBytes=(size,unit="MB")=>{switch(unit){case"MB":return size*1024*1024;case"KB":return size*1024;case"B":return size}},createFileSchema=({acceptedTypes,maxSize=1/0,minSize,messages={}}={})=>{let maxBytes=maxSize?convertToBytes(maxSize):1/0,minBytes=minSize?convertToBytes(minSize):0,validMimeTypes=acceptedTypes?Object.entries(acceptedTypes).flatMap(([category,types])=>{let cat=category;if(types==="*")return MIME_TYPES[cat];if(Array.isArray(types))return types;return[]}):void 0,schema=z3.instanceof(File,{message:messages.required??"File is required"});if(schema=schema.refine((file)=>file.size<=maxBytes,messages.maxSize??`File size must be less than ${maxSize}MB`).refine((file)=>file.size>=minBytes,messages.minSize??`File size must be at least ${minSize}MB`),validMimeTypes?.length)schema=schema.refine((file)=>validMimeTypes.includes(file.type),messages.type??`File must be of type: ${validMimeTypes.join(", ")}`);return schema};var createPathBlocker=(config)=>{let patterns=config.paths.map((path)=>new RegExp(path)),message="Not Found";return async(ctx)=>{let path=new URL(ctx.req.url).pathname;if(patterns.some((pattern)=>pattern.test(path)))throw Error("Not Found")}};class RateLimiter{requests=new Map;lastCleanupTime=Date.now();alertThreshold;config;constructor(config){this.config={windowMs:config.windowMs,maxRequests:config.maxRequests,maxEntries:config.maxEntries??1e4,cleanupIntervalMs:config.cleanupIntervalMs??60000,message:config.message??"Too Many Requests",statusCode:config.statusCode??429,headerPrefix:config.headerPrefix??"X-RateLimit"},this.alertThreshold=this.config.maxEntries*0.8}cleanup(){let now=Date.now(),deletedCount=0;for(let[ip,window]of this.requests.entries()){let windowExpired=now-window.startTime>this.config.windowMs,inactive=now-window.lastAccessed>this.config.windowMs*2;if(windowExpired||inactive)this.requests.delete(ip),deletedCount++}return this.lastCleanupTime=now,deletedCount}handleMaxEntries(ip){let currentSize=this.requests.size;if(Date.now()-this.lastCleanupTime>this.config.cleanupIntervalMs)this.cleanup();if(currentSize>=this.alertThreshold)console.warn(`Rate limiter at ${Math.round(currentSize/this.config.maxEntries*100)}% capacity`);if(this.requests.has(ip))return!0;return currentSize<this.config.maxEntries}check(ip){if(!this.handleMaxEntries(ip))return{isLimited:!0,remaining:0,resetTime:Date.now()+this.config.windowMs};let now=Date.now(),window=this.requests.get(ip);if(!window||now-window.startTime>=this.config.windowMs)return this.requests.set(ip,{count:1,startTime:now,lastAccessed:now}),{isLimited:!1,remaining:this.config.maxRequests-1,resetTime:now+this.config.windowMs};window.lastAccessed=now;let isLimited=window.count>=this.config.maxRequests;if(!isLimited)window.count++;return{isLimited,remaining:Math.max(0,this.config.maxRequests-window.count),resetTime:window.startTime+this.config.windowMs}}getConfig(){return this.config}}var createRateLimiter=(config)=>{let limiter=new RateLimiter(config);return async(ctx)=>{if(ctx.req.headers.get("range"))return;let ip=ctx.req.headers.get("x-forwarded-for")?.split(",")[0]||ctx.req.headers.get("x-real-ip")||"unknown",{isLimited,remaining,resetTime}=limiter.check(ip),{headerPrefix}=limiter.getConfig();if(ctx.headers.set(`${headerPrefix}-Remaining`,remaining.toString()),ctx.headers.set(`${headerPrefix}-Reset`,resetTime.toString()),isLimited)throw ctx.headers.set(`${headerPrefix}-Exceeded`,"true"),Error(limiter.getConfig().message)}};function createMiddleware(contextOrFn,fn){return fn??contextOrFn}async function measure(label,fn){let start=performance.now();try{return await fn()}catch(err){let end=performance.now();throw console.log(`[PERF] ${label} failed after ${(end-start).toFixed(4)} ms`),err}finally{let end=performance.now();console.log(`[PERF] ${label}: ${(end-start).toFixed(4)} ms`)}}export{streamMedia,F as quickHeaders,measure,Z as hashContent,V as getMimeType,B as getCorsOrigin,createRouter,createRateLimiter,createProcedure,createPathBlocker,createMiddleware,createFileSchema,createContext,G as commonHeaders,Q as buildHeaders,Router,CacheService,BRPCError};
5
5
 
6
- //# debugId=F612D0D8B6F80A0564756E2164756E21
6
+ //# debugId=BD57865531C7FA3F64756E2164756E21
package/dist/index.js.map CHANGED
@@ -15,7 +15,7 @@
15
15
  "import type { BaseContext } from \"../types\";\r\n\r\n/**\r\n * Helper to define a reusable, typed middleware outside of a procedure chain.\r\n *\r\n * @example\r\n * ```ts\r\n * // Infer context type from your context creator\r\n * const authMiddleware = createMiddleware(context, async (ctx) => {\r\n * const session = await getSession(ctx.req);\r\n * if (!session) throw new BRPCError({ code: \"UNAUTHORIZED\" });\r\n * return { session };\r\n * });\r\n *\r\n * // Or with an explicit generic (no context reference needed)\r\n * const authMiddleware = createMiddleware<MyContext>(async (ctx) => {\r\n * return { session: await getSession(ctx.req) };\r\n * });\r\n *\r\n * createProcedure(context)\r\n * .use(authMiddleware) // ctx.session is typed in the handler ✅\r\n * .query(async ({ ctx }) => ctx.session.user);\r\n * ```\r\n */\r\nexport function createMiddleware<C extends BaseContext, TReturn extends Record<string, any> | void = void>(\r\n _context: (req: Request) => Promise<C>,\r\n fn: (ctx: C) => Promise<TReturn>\r\n): (ctx: C) => Promise<TReturn>;\r\nexport function createMiddleware<C extends BaseContext, TReturn extends Record<string, any> | void = void>(\r\n fn: (ctx: C) => Promise<TReturn>\r\n): (ctx: C) => Promise<TReturn>;\r\nexport function createMiddleware<C extends BaseContext, TReturn extends Record<string, any> | void = void>(\r\n contextOrFn: ((req: Request) => Promise<C>) | ((ctx: C) => Promise<TReturn>),\r\n fn?: (ctx: C) => Promise<TReturn>\r\n): (ctx: C) => Promise<TReturn> {\r\n return fn ?? (contextOrFn as (ctx: C) => Promise<TReturn>);\r\n}\r\n",
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
- "mappings": "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",
19
- "debugId": "F612D0D8B6F80A0564756E2164756E21",
18
+ "mappings": "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",
19
+ "debugId": "BD57865531C7FA3F64756E2164756E21",
20
20
  "names": []
21
21
  }
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- var S=(M)=>M.startsWith("image/"),z=(M)=>M.startsWith("video/"),D=(M)=>M.startsWith("audio/"),x=(M)=>M.startsWith("text/")||M.includes("pdf")||M.includes("word")||M.includes("sheet")||M.includes("presentation")||M.includes("opendocument")||M==="application/rtf",U=(M)=>M.includes("zip")||M.includes("rar")||M.includes("tar")||M.includes("7z")||M.includes("gzip"),N=(M)=>M==="application/javascript"||M==="application/json"||M==="text/html"||M==="text/css"||M==="application/xml"||M.includes("javascript"),q=(M)=>M.startsWith("font/")||M.includes("font"),v=(M)=>{if(!M)return"other";let _=M.toLowerCase();if(S(_))return"image";if(z(_))return"video";if(D(_))return"audio";if(x(_))return"document";if(U(_))return"archive";if(N(_))return"code";if(q(_))return"font";return"other"},V={isImage:S,isVideo:z,isAudio:D,isDocument:x,isArchive:U,isCode:N,isFont:q};function n(){let _=Buffer.from("Hello, this is a test file for S3 upload!","utf-8");return new File([_],"test.txt",{type:"text/plain"})}function f(M,_){if(M.url)return M.url;if(M.key)if(M.isPrivate)return`/storage/${M.key}`;else return`https://${_?.bucket??process.env.AWS_BUCKET}.s3.amazonaws.com/${M.key}`;throw Error("Invalid storage object")}function W(M,_){if(!M||M<1||!_||_<1)return"1:1";let $=(Q,J)=>J===0?Q:$(J,Q%J),H=$(M,_);return`${M/H}:${_/H}`}function s(M,_){if(!M||!_||M<1||_<1)return"1:1";let $=M/_,H=[{ratio:1,label:"1:1"},{ratio:0.8,label:"4:5"},{ratio:0.75,label:"3:4"},{ratio:0.6666666666666666,label:"2:3"},{ratio:0.5625,label:"9:16"},{ratio:1.5,label:"3:2"},{ratio:1.3333333333333333,label:"4:3"},{ratio:1.7777777777777777,label:"16:9"},{ratio:2.3333333333333335,label:"21:9"}],Q=0.03;for(let{ratio:Y,label:Z}of H)if(Math.abs($-Y)/Y<Q)return Z;let J=(Y,Z)=>Z===0?Y:J(Z,Y%Z),L=J(M,_);return`${M/L}:${_/L}`}class X 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(M){super(M.message);if(this.name="BRPCError",this.code=M.code,this.clientCode=M.clientCode,this.httpStatus=X.STATUS_MAP[M.code],this.data=M.data,this.cause=M.cause,Error.captureStackTrace)Error.captureStackTrace(this,X)}toJSON(){return{name:this.name,code:this.code,clientCode:this.clientCode,message:this.message,data:this.data,httpStatus:this.httpStatus}}static badRequest(M,_,$){return new X({code:"BAD_REQUEST",message:M,clientCode:_,data:$})}static unauthorized(M="Unauthorized",_,$){return new X({code:"UNAUTHORIZED",message:M,clientCode:_,data:$})}static forbidden(M="Forbidden",_,$){return new X({code:"FORBIDDEN",message:M,clientCode:_,data:$})}static notFound(M="Not Found",_,$){return new X({code:"NOT_FOUND",message:M,clientCode:_,data:$})}static preconditionFailed(M="Precondition failed",_,$){return new X({code:"NOT_FOUND",message:M,clientCode:_,data:$})}static conflict(M,_,$){return new X({code:"CONFLICT",message:M,clientCode:_,data:$})}static unprocessableContent(M,_,$){return new X({code:"UNPROCESSABLE_CONTENT",message:M,clientCode:_,data:$})}static tooManyRequests(M="Too many requests",_,$){return new X({code:"TOO_MANY_REQUESTS",message:M,clientCode:_,data:$})}static internalServerError(M="Internal Server Error",_,$){return new X({code:"INTERNAL_SERVER_ERROR",message:M,clientCode:_,data:$})}static timeout(M="Request timeout",_,$){return new X({code:"TIMEOUT",message:M,clientCode:_,data:$})}}import w from"sharp";async function F(M,_,$,H,Q){try{let{data:J,info:L}=await w(M).resize(_,null,{withoutEnlargement:!0}).webp({quality:$}).toBuffer({resolveWithObject:!0});return{buffer:J,object:{name:H.replace(/\.[^/.]+$/,".webp"),resolvedType:"image",metadata:{type:"image/webp",size:J.length,extension:".webp",width:L.width,height:L.height,aspectRatio:L.height>0?L.width/L.height:1,aspectRatioStr:W(L.width,L.height),acl:Q}}}}catch(J){throw X.conflict(`Failed to optimize image: ${J instanceof Error?J.message:"Unknown error"}`)}}async function e(M,{width:_,quality:$,acl:H}={}){let Q=_??1200,J=$??75;if(!M)throw X.conflict("A file must be provided");let L,Y="unknown.webp";if(typeof M==="string"){if(!M.startsWith("data:"))throw X.conflict("Invalid base64 format");let[,Z]=M.split(",");if(!Z)throw X.conflict("Invalid base64 data");L=Buffer.from(Z,"base64")}else{if(!V.isImage(M.type))throw X.conflict("File must be an image");let Z=await M.arrayBuffer();L=Buffer.from(Z),Y=M.name??Y}return F(L,Q,J,Y,H??"public-read")}async function M0(M,{name:_="unknown.webp",width:$,quality:H,acl:Q}={}){if(!M?.length)throw X.conflict("A buffer must be provided");return F(M,$??1200,H??75,_,Q??"public-read")}import P from"sharp";import{randomUUID as k}from"crypto";import{extname as R}from"path";async function I(M,_,$){if(!_)return{data:null,error:Error("File not found")};let H=M.replace(/^\/+|\/+$/g,""),Q=R(_.name),J=`${k()}${Q}`,L=`${H}/${J}`,Y=`./buckets/${H}/${J}`;try{let Z=await Bun.write(Y,_);return{data:{key:L,file:_,bytesWritten:Z},error:null}}catch(Z){return{data:null,error:Error(`Failed to upload ${_.name} to local filesystem`)}}}async function E(M,_,$){if(!_||_.length===0)return[];let H=_.map((J)=>{let L=$?.(J)??J.name;return I(M,J,L)});return await Promise.all(H)}async function B(M){let _=Bun.file(`./buckets/${M}`);if(!await _.exists())return null;return _}async function b(M){let _=Bun.file(`./buckets/${M}`);if(!await _.exists())return!1;return await _.delete(),!0}var A={uploadOne:I,uploadMany:E,getOne:B,deleteOne:b};async function Y0(M){let _=`./cache/images/${M.key}_${M.width}_${M.quality}.webp`,$=await A.getOne(_);if($){if(!V.isImage($.type))return null;return $}let H=M.key,Q=await A.getOne(H);if(!Q)return null;if(!V.isImage(Q.type))return null;let J=await Q.arrayBuffer(),L=await P(J).resize(M.width,null,{withoutEnlargement:!0}).webp({quality:M.quality??75}).toBuffer();await Bun.write(_,L);let Y=Bun.file(_);if(!await Y.exists())return null;return Y}import g from"sharp";async function W0(M){if(!M?.length)return null;try{let _=await g(M).metadata(),$=_.width??0,H=_.height??0,Q=_.height>0?$/H:1;return{type:`image/${_.format}`,size:_.size??0,extension:`.${_.format}`,width:$,height:H,aspectRatio:Q,aspectRatioStr:W($,H)}}catch(_){return console.warn("Failed to read image metadata:",_),null}}var j=process.env.AWS_FOLDER,T=j?`${j}/`:"";var{s3:C}=globalThis.Bun;import{extname as m}from"path";async function u(M,_,$){let H="buffer"in _?_:{buffer:_,object:{name:_.name,resolvedType:v(_.type),metadata:{type:_.type,extension:m(_.name),size:_.size,acl:$?.acl??"public-read"}}};if("buffer"in _){if(!_.object?.name||!_.object?.metadata)throw X.badRequest("Complete metadata required when uploading buffer")}let Q=M.length>1?`${M.replace(/^\/+|\/+$/g,"")}/`:"",J=H.object.metadata.extension.startsWith(".")?H.object.metadata.extension:`.${H.object.metadata.extension}`,L=`${crypto.randomUUID()}${J}`,Y=`${T}${Q}${L}`,Z=C.file(Y),G=H?.object?.metadata?.acl??"public-read",K=G!=="public-read"&&G!=="public-read-write",O=await Z.write(H.buffer,{acl:G});return{uploadedBy:$?.uploadedBy??null,key:Y,url:null,name:H.object.name,thumbnail:null,resolvedType:H.object.resolvedType,provider:"s3",isPrivate:K,metadata:{...H.object.metadata,size:O,acl:G},isActive:!0}}async function N0(M,_,$={throwIf:"any"}){let H=await Promise.allSettled(_.map((L)=>u(M,L,{acl:$?.acl,uploadedBy:$?.uploadedBy}))),Q=[],J=[];if(H.forEach((L)=>{if(L.status==="fulfilled"){if(Q.push(L.value),$?.externalKeys)$.externalKeys.push(L.value.key)}else J.push(L.reason)}),$?.throwIf==="any"&&J.length>0||$?.throwIf==="all"&&J.length===_.length)throw X.internalServerError(`Upload failed: ${J.length} of ${_.length}`);return{data:Q,errors:J.length?J:void 0}}var{s3:h}=globalThis.Bun;async function c(M,_){if(!M||typeof M!=="string")throw X.badRequest("Key is required");let $=M.trim();if(!$||$.length===0)throw X.badRequest("Key must be a non-empty string");try{return await h.delete(M),{key:M,deleted:!0,error:null}}catch(H){return{key:M,deleted:!1,error:H}}}async function I0(M,_){return(await Promise.allSettled(M.map((H)=>c(H,_)))).map((H,Q)=>{if(H.status==="fulfilled")return H.value;return{key:M[Q],deleted:!1,error:H.reason}})}var{s3:y}=globalThis.Bun;async function O0(M,_={debug:!0}){try{return{exists:await y.exists(M),error:null}}catch($){if(_?.debug)console.error("There was an error checking for file existance",$);return{exists:null,error:$}}}export{u as uploadOne,N0 as uploadMany,M0 as optimizeImageBuffer,e as optimizeImage,v as mimeTypeToResolvedType,Y0 as getOptimizedImage,f as getObjectUrl,W0 as getImageMetadata,s as getAspectRatioStringRound,W as getAspectRatioString,n as generateTestFile,V as fileTypePredicates,c as deleteOne,I0 as deleteMany,O0 as checkFileExistance};
2
+ var isImage=(type)=>type.startsWith("image/"),isVideo=(type)=>type.startsWith("video/"),isAudio=(type)=>type.startsWith("audio/"),isDocument=(type)=>type.startsWith("text/")||type.includes("pdf")||type.includes("word")||type.includes("sheet")||type.includes("presentation")||type.includes("opendocument")||type==="application/rtf",isArchive=(type)=>type.includes("zip")||type.includes("rar")||type.includes("tar")||type.includes("7z")||type.includes("gzip"),isCode=(type)=>type==="application/javascript"||type==="application/json"||type==="text/html"||type==="text/css"||type==="application/xml"||type.includes("javascript"),isFont=(type)=>type.startsWith("font/")||type.includes("font"),mimeTypeToResolvedType=(mimeType)=>{if(!mimeType)return"other";let type=mimeType.toLowerCase();if(isImage(type))return"image";if(isVideo(type))return"video";if(isAudio(type))return"audio";if(isDocument(type))return"document";if(isArchive(type))return"archive";if(isCode(type))return"code";if(isFont(type))return"font";return"other"},fileTypePredicates={isImage,isVideo,isAudio,isDocument,isArchive,isCode,isFont};function generateTestFile(){let buffer=Buffer.from("Hello, this is a test file for S3 upload!","utf-8");return new File([buffer],"test.txt",{type:"text/plain"})}function getObjectUrl(storageObject,options){if(storageObject.url)return storageObject.url;if(storageObject.key)if(storageObject.isPrivate)return`/storage/${storageObject.key}`;else return`https://${options?.bucket??process.env.AWS_BUCKET}.s3.amazonaws.com/${storageObject.key}`;throw Error("Invalid storage object")}function getAspectRatioString(width,height){if(!width||width<1||!height||height<1)return"1:1";let gcd=(a,b)=>b===0?a:gcd(b,a%b),divisor=gcd(width,height);return`${width/divisor}:${height/divisor}`}function getAspectRatioStringRound(width,height){if(!width||!height||width<1||height<1)return"1:1";let ratio=width/height,commonRatios=[{ratio:1,label:"1:1"},{ratio:0.8,label:"4:5"},{ratio:0.75,label:"3:4"},{ratio:0.6666666666666666,label:"2:3"},{ratio:0.5625,label:"9:16"},{ratio:1.5,label:"3:2"},{ratio:1.3333333333333333,label:"4:3"},{ratio:1.7777777777777777,label:"16:9"},{ratio:2.3333333333333335,label:"21:9"}],TOLERANCE=0.03;for(let{ratio:commonRatio,label}of commonRatios)if(Math.abs(ratio-commonRatio)/commonRatio<TOLERANCE)return label;let gcd=(a,b)=>b===0?a:gcd(b,a%b),divisor=gcd(width,height);return`${width/divisor}:${height/divisor}`}class BRPCError 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(options){super(options.message);if(this.name="BRPCError",this.code=options.code,this.clientCode=options.clientCode,this.httpStatus=BRPCError.STATUS_MAP[options.code],this.data=options.data,this.cause=options.cause,Error.captureStackTrace)Error.captureStackTrace(this,BRPCError)}toJSON(){return{name:this.name,code:this.code,clientCode:this.clientCode,message:this.message,data:this.data,httpStatus:this.httpStatus}}static badRequest(message,clientCode,data){return new BRPCError({code:"BAD_REQUEST",message,clientCode,data})}static unauthorized(message="Unauthorized",clientCode,data){return new BRPCError({code:"UNAUTHORIZED",message,clientCode,data})}static forbidden(message="Forbidden",clientCode,data){return new BRPCError({code:"FORBIDDEN",message,clientCode,data})}static notFound(message="Not Found",clientCode,data){return new BRPCError({code:"NOT_FOUND",message,clientCode,data})}static preconditionFailed(message="Precondition failed",clientCode,data){return new BRPCError({code:"NOT_FOUND",message,clientCode,data})}static conflict(message,clientCode,data){return new BRPCError({code:"CONFLICT",message,clientCode,data})}static unprocessableContent(message,clientCode,data){return new BRPCError({code:"UNPROCESSABLE_CONTENT",message,clientCode,data})}static tooManyRequests(message="Too many requests",clientCode,data){return new BRPCError({code:"TOO_MANY_REQUESTS",message,clientCode,data})}static internalServerError(message="Internal Server Error",clientCode,data){return new BRPCError({code:"INTERNAL_SERVER_ERROR",message,clientCode,data})}static timeout(message="Request timeout",clientCode,data){return new BRPCError({code:"TIMEOUT",message,clientCode,data})}}import sharp from"sharp";async function processSharpImage(buffer,maxWidth,quality,name,acl){try{let{data:optimizedBuffer,info}=await sharp(buffer).resize(maxWidth,null,{withoutEnlargement:!0}).webp({quality}).toBuffer({resolveWithObject:!0});return{buffer:optimizedBuffer,object:{name:name.replace(/\.[^/.]+$/,".webp"),resolvedType:"image",metadata:{type:"image/webp",size:optimizedBuffer.length,extension:".webp",width:info.width,height:info.height,aspectRatio:info.height>0?info.width/info.height:1,aspectRatioStr:getAspectRatioString(info.width,info.height),acl}}}}catch(error){throw BRPCError.conflict(`Failed to optimize image: ${error instanceof Error?error.message:"Unknown error"}`)}}async function optimizeImage(file,{width,quality,acl}={}){let maxWidth=width??1200,q=quality??75;if(!file)throw BRPCError.conflict("A file must be provided");let inputBuffer,originalName="unknown.webp";if(typeof file==="string"){if(!file.startsWith("data:"))throw BRPCError.conflict("Invalid base64 format");let[,data]=file.split(",");if(!data)throw BRPCError.conflict("Invalid base64 data");inputBuffer=Buffer.from(data,"base64")}else{if(!fileTypePredicates.isImage(file.type))throw BRPCError.conflict("File must be an image");let arrayBuffer=await file.arrayBuffer();inputBuffer=Buffer.from(arrayBuffer),originalName=file.name??originalName}return processSharpImage(inputBuffer,maxWidth,q,originalName,acl??"public-read")}async function optimizeImageBuffer(buffer,{name="unknown.webp",width,quality,acl}={}){if(!buffer?.length)throw BRPCError.conflict("A buffer must be provided");return processSharpImage(buffer,width??1200,quality??75,name,acl??"public-read")}import sharp2 from"sharp";import{randomUUID}from"crypto";import{extname}from"path";async function uploadOne(path,file,_filename){if(!file)return{data:null,error:Error("File not found")};let cleanPath=path.replace(/^\/+|\/+$/g,""),ext=extname(file.name),uniqueName=`${randomUUID()}${ext}`,filePath=`${cleanPath}/${uniqueName}`,fullPath=`./buckets/${cleanPath}/${uniqueName}`;try{let writtenBytes=await Bun.write(fullPath,file);return{data:{key:filePath,file,bytesWritten:writtenBytes},error:null}}catch(err){return{data:null,error:Error(`Failed to upload ${file.name} to local filesystem`)}}}async function uploadMany(path,files,nameGetter){if(!files||files.length===0)return[];let uploadPromises=files.map((file)=>{let filename=nameGetter?.(file)??file.name;return uploadOne(path,file,filename)});return await Promise.all(uploadPromises)}async function getOne(key){let file=Bun.file(`./buckets/${key}`);if(!await file.exists())return null;return file}async function deleteOne(key){let file=Bun.file(`./buckets/${key}`);if(!await file.exists())return!1;return await file.delete(),!0}var local={uploadOne,uploadMany,getOne,deleteOne};async function getOptimizedImage(options){let localCache=`./cache/images/${options.key}_${options.width}_${options.quality}.webp`,localFile=await local.getOne(localCache);if(localFile){if(!fileTypePredicates.isImage(localFile.type))return null;return localFile}let originalKey=options.key,originalFile=await local.getOne(originalKey);if(!originalFile)return null;if(!fileTypePredicates.isImage(originalFile.type))return null;let buffer=await originalFile.arrayBuffer(),optimizedBuffer=await sharp2(buffer).resize(options.width,null,{withoutEnlargement:!0}).webp({quality:options.quality??75}).toBuffer();await Bun.write(localCache,optimizedBuffer);let cachedFile=Bun.file(localCache);if(!await cachedFile.exists())return null;return cachedFile}import sharp3 from"sharp";async function getImageMetadata(buffer){if(!buffer?.length)return null;try{let meta=await sharp3(buffer).metadata(),width=meta.width??0,height=meta.height??0,aspectRatio=meta.height>0?width/height:1;return{type:`image/${meta.format}`,size:meta.size??0,extension:`.${meta.format}`,width,height,aspectRatio,aspectRatioStr:getAspectRatioString(width,height)}}catch(err){return console.warn("Failed to read image metadata:",err),null}}var AWS_FOLDER=process.env.AWS_FOLDER,CONSTRUCTED_AWS_FOLDER=AWS_FOLDER?`${AWS_FOLDER}/`:"";var{s3:s3Bun}=globalThis.Bun;import{extname as extname2}from"path";async function uploadOne2(path,file,opts){let fileInfo="buffer"in file?file:{buffer:file,object:{name:file.name,resolvedType:mimeTypeToResolvedType(file.type),metadata:{type:file.type,extension:extname2(file.name),size:file.size,acl:opts?.acl??"public-read"}}};if("buffer"in file){if(!file.object?.name||!file.object?.metadata)throw BRPCError.badRequest("Complete metadata required when uploading buffer")}let cleanPath=path.length>1?`${path.replace(/^\/+|\/+$/g,"")}/`:"",extension=fileInfo.object.metadata.extension.startsWith(".")?fileInfo.object.metadata.extension:`.${fileInfo.object.metadata.extension}`,fileName=`${crypto.randomUUID()}${extension}`,key=`${CONSTRUCTED_AWS_FOLDER}${cleanPath}${fileName}`,s3file=s3Bun.file(key),acl=fileInfo?.object?.metadata?.acl??"public-read",isPrivate=acl!=="public-read"&&acl!=="public-read-write",writtenBytes=await s3file.write(fileInfo.buffer,{acl});return{uploadedBy:opts?.uploadedBy??null,key,url:null,name:fileInfo.object.name,thumbnail:null,resolvedType:fileInfo.object.resolvedType,provider:"s3",isPrivate,metadata:{...fileInfo.object.metadata,size:writtenBytes,acl},isActive:!0}}async function uploadMany2(path,files,opts={throwIf:"any"}){let results=await Promise.allSettled(files.map((file)=>uploadOne2(path,file,{acl:opts?.acl,uploadedBy:opts?.uploadedBy}))),data=[],errors=[];if(results.forEach((res)=>{if(res.status==="fulfilled"){if(data.push(res.value),opts?.externalKeys)opts.externalKeys.push(res.value.key)}else errors.push(res.reason)}),opts?.throwIf==="any"&&errors.length>0||opts?.throwIf==="all"&&errors.length===files.length)throw BRPCError.internalServerError(`Upload failed: ${errors.length} of ${files.length}`);return{data,errors:errors.length?errors:void 0}}var{s3:s3Bun2}=globalThis.Bun;async function deleteOne2(key,opts){if(!key||typeof key!=="string")throw BRPCError.badRequest("Key is required");let sanitizedKey=key.trim();if(!sanitizedKey||sanitizedKey.length===0)throw BRPCError.badRequest("Key must be a non-empty string");try{return await s3Bun2.delete(key),{key,deleted:!0,error:null}}catch(e){return{key,deleted:!1,error:e}}}async function deleteMany(keys,opts){return(await Promise.allSettled(keys.map((key)=>deleteOne2(key,opts)))).map((res,i)=>{if(res.status==="fulfilled")return res.value;return{key:keys[i],deleted:!1,error:res.reason}})}var{s3:s3Bun3}=globalThis.Bun;async function checkFileExistance(key,opts={debug:!0}){try{return{exists:await s3Bun3.exists(key),error:null}}catch(e){if(opts?.debug)console.error("There was an error checking for file existance",e);return{exists:null,error:e}}}export{uploadOne2 as uploadOne,uploadMany2 as uploadMany,optimizeImageBuffer,optimizeImage,mimeTypeToResolvedType,getOptimizedImage,getObjectUrl,getImageMetadata,getAspectRatioStringRound,getAspectRatioString,generateTestFile,fileTypePredicates,deleteOne2 as deleteOne,deleteMany,checkFileExistance};
3
3
 
4
- //# debugId=0E360294ED80A4DC64756E2164756E21
4
+ //# debugId=7C9F44CC21527DCE64756E2164756E21
@@ -14,7 +14,7 @@
14
14
  "import { BRPCError } from \"../../errors\";\r\nimport { s3 as s3Bun } from \"bun\";\r\nimport type { DeleteOneResult } from \"./types\";\r\n\r\nexport async function deleteOne(\r\n key: string,\r\n opts?: { debug?: boolean }\r\n): Promise<DeleteOneResult> {\r\n if (!key || typeof key !== \"string\") {\r\n throw BRPCError.badRequest(\"Key is required\");\r\n }\r\n\r\n const sanitizedKey = key.trim();\r\n if (!sanitizedKey || sanitizedKey.length === 0) {\r\n throw BRPCError.badRequest(\"Key must be a non-empty string\");\r\n }\r\n\r\n try {\r\n await s3Bun.delete(key);\r\n return {\r\n key: key,\r\n deleted: true,\r\n error: null,\r\n };\r\n } catch (e) {\r\n return {\r\n key: key,\r\n deleted: false,\r\n error: e as Error,\r\n };\r\n // if (opts?.debug) {\r\n // console.error(`Error deleting file with key \"${key}\"`, e);\r\n // }\r\n //? Handle this at app level\r\n // throw BRPCError.conflict(\r\n // \"There was an error when trying to delete the file\",\r\n // \"FILE_NOT_DELETED\"\r\n // );\r\n }\r\n}\r\n\r\n/**\r\n * Deletes multiple S3 keys in parallel.\r\n * Returns per-key result so caller can handle failures/rollback.\r\n */\r\nexport async function deleteMany(\r\n keys: string[],\r\n opts?: { debug?: boolean }\r\n): Promise<DeleteOneResult[]> {\r\n const results = await Promise.allSettled(\r\n keys.map((key) => deleteOne(key, opts))\r\n );\r\n\r\n return results.map((res, i) => {\r\n if (res.status === \"fulfilled\") return res.value;\r\n return { key: keys[i], deleted: false, error: res.reason as Error };\r\n });\r\n}\r\n",
15
15
  "import { s3 as s3Bun } from \"bun\";\r\n\r\n/**\r\n * Checks a file existance in S3\r\n */\r\nasync function checkFileExistance(\r\n key: string,\r\n opts: { debug?: boolean } = { debug: process.env.NODE_ENV !== \"production\" }\r\n): Promise<{ exists: boolean; error: null } | { exists: null; error: Error }> {\r\n try {\r\n const exists = await s3Bun.exists(key);\r\n return { exists, error: null };\r\n } catch (e) {\r\n if (opts?.debug) {\r\n console.error(\"There was an error checking for file existance\", e);\r\n }\r\n return { exists: null, error: e as Error };\r\n }\r\n}\r\n\r\nexport { checkFileExistance };\r\n"
16
16
  ],
17
- "mappings": "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",
18
- "debugId": "0E360294ED80A4DC64756E2164756E21",
17
+ "mappings": "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",
18
+ "debugId": "7C9F44CC21527DCE64756E2164756E21",
19
19
  "names": []
20
20
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mateosuarezdev/brpc",
3
- "version": "1.0.54",
3
+ "version": "1.0.55",
4
4
  "description": "A Type-Safe, Flexible Web application framework for Bun",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -40,10 +40,10 @@
40
40
  "typecheck": "tsc --noEmit",
41
41
  "clean": "rimraf dist",
42
42
  "prepublish": "yarn typecheck && yarn build",
43
- "rel": "yarn npm publish --access public",
44
- "rel:patch": "yarn version patch && yarn npm publish --access public",
45
- "rel:minor": "yarn version minor && yarn npm publish --access public",
46
- "rel:major": "yarn version major && yarn npm publish --access public"
43
+ "rel": "npm publish --access public",
44
+ "rel:patch": "yarn run prepublish && yarn version patch && npm publish --access public",
45
+ "rel:minor": "yarn run prepublish && yarn version minor && npm publish --access public",
46
+ "rel:major": "yarn run prepublish && yarn version major && npm publish --access public"
47
47
  },
48
48
  "keywords": [
49
49
  "bun",