universal-client 0.0.11 → 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  'use strict';/**
2
- * universal-client v0.0.11
2
+ * universal-client v0.0.12
3
3
  * (c) 2026 Kevin Bonnoron
4
4
  * @license MIT
5
5
  */
6
- var q=Object.defineProperty;var b=(t,e)=>()=>(t&&(e=t(t=0)),e);var x=(t,e)=>{for(var s in e)q(t,s,{get:e[s],enumerable:true});};var A={};x(A,{createAxiosDelegate:()=>U});async function U(t){let e;try{e=await new Function("moduleName","return import(moduleName)")("axios");}catch{e=null;}if(!e)throw new Error("Axios is not installed. Please install axios to use the axios delegate.");let s=e.default,{baseURL:n,...o}=t,r=s.create({baseURL:n,...o});return {get(a,u){return r.get(a,{headers:u?.headers}).then(l=>l.data)},post(a,u,l){return r.post(a,u,{headers:l?.headers}).then(m=>m.data)},patch(a,u,l){return r.patch(a,u,{headers:l?.headers}).then(m=>m.data)},put(a,u,l){return r.put(a,u,{headers:l?.headers}).then(m=>m.data)},delete(a,u){return r.delete(a,{headers:u?.headers}).then(l=>l.data)}}}var H=b(()=>{});var B={};x(B,{createBetterFetchDelegate:()=>j});async function j(t){let e;try{e=await new Function("moduleName","return import(moduleName)")("@better-fetch/fetch");}catch{e=null;}if(!e)throw new Error("@better-fetch/fetch is not installed. Please install @better-fetch/fetch to use the better-fetch delegate.");let{createFetch:s}=e,{baseURL:n,...o}=t,r=s({baseURL:n,...o});return {get(a,u){return r(a,{headers:u?.headers}).then(l=>l.data)},post(a,u,l){return r(a,{method:"POST",body:u,headers:l?.headers}).then(m=>m.data)},patch(a,u,l){return r(a,{method:"PATCH",body:u,headers:l?.headers}).then(m=>m.data)},put(a,u,l){return r(a,{method:"PUT",body:u,headers:l?.headers}).then(m=>m.data)},delete(a,u){return r(a,{method:"DELETE",headers:u?.headers}).then(l=>l.data)}}}var R=b(()=>{});function N(t){return async e=>{if(!e.ok){let s=`HTTP ${e.status}: ${e.statusText}`;try{let n=await e.clone().json();n.error?s=n.error:n.message&&(s=n.message);}catch{}throw new Error(s)}return t==="json"?e.json():t==="text"?e.text():e}}function G(t){let e=new URLSearchParams;for(let[s,n]of Object.entries(t??{}))if(n!=null)if(n instanceof Date)e.append(s,n.toISOString());else if(Array.isArray(n))for(let o of n)e.append(`${s}[]`,o?.toString()??"");else e.append(s,n.toString());return e.size?`?${e}`:""}function T({baseURL:t,format:e="json"}){function s(n,o,r,{params:a={},headers:u={}}={}){let l={method:n,headers:{...u}};return r&&(l.body=JSON.stringify(r)),fetch(`${t}${o}${G(a)}`,l).then(N(e))}return {get(n,{params:o={},headers:r={}}={}){return s("GET",n,void 0,{params:o,headers:r})},post(n,o,{params:r={},headers:a={}}={}){return s("POST",n,o,{params:r,headers:a})},patch(n,o,{params:r={},headers:a={}}={}){return s("PATCH",n,o,{params:r,headers:a})},put(n,o,{params:r={},headers:a={}}={}){return s("PUT",n,o,{params:r,headers:a})},delete(n,{params:o={},headers:r={}}={}){return s("DELETE",n,void 0,{params:o,headers:r})}}}async function I(t){if(t.impl==="axios"){let{createAxiosDelegate:e}=await Promise.resolve().then(()=>(H(),A));return e(t)}if(t.impl==="better-fetch"){let{createBetterFetchDelegate:e}=await Promise.resolve().then(()=>(R(),B));return e(t)}return T(t)}async function P({baseURL:t}){let e=new Set,s=new Set,n=new Set,o=new Map,r=null,a=null;function u(){r&&(r.close(),r=null),a&&(a.abort(),a=null);}function l(g,f){let d=f.join(`
6
+ var q=Object.defineProperty;var b=(t,e)=>()=>(t&&(e=t(t=0)),e);var x=(t,e)=>{for(var s in e)q(t,s,{get:e[s],enumerable:true});};var A={};x(A,{createAxiosDelegate:()=>U});async function U(t){let e;try{e=await new Function("moduleName","return import(moduleName)")("axios");}catch{e=null;}if(!e)throw new Error("Axios is not installed. Please install axios to use the axios delegate.");let s=e.default,{baseURL:n,...o}=t,r=s.create({baseURL:n,...o});return {get(a,u){return r.get(a,{headers:u?.headers}).then(l=>l.data)},post(a,u,l){return r.post(a,u,{headers:l?.headers}).then(m=>m.data)},patch(a,u,l){return r.patch(a,u,{headers:l?.headers}).then(m=>m.data)},put(a,u,l){return r.put(a,u,{headers:l?.headers}).then(m=>m.data)},delete(a,u){return r.delete(a,{headers:u?.headers}).then(l=>l.data)}}}var H=b(()=>{});var B={};x(B,{createBetterFetchDelegate:()=>j});async function j(t){let e;try{e=await new Function("moduleName","return import(moduleName)")("@better-fetch/fetch");}catch{e=null;}if(!e)throw new Error("@better-fetch/fetch is not installed. Please install @better-fetch/fetch to use the better-fetch delegate.");let{createFetch:s}=e,{baseURL:n,...o}=t,r=s({baseURL:n,...o});return {get(a,u){return r(a,{headers:u?.headers}).then(l=>l.data)},post(a,u,l){return r(a,{method:"POST",body:u,headers:l?.headers}).then(m=>m.data)},patch(a,u,l){return r(a,{method:"PATCH",body:u,headers:l?.headers}).then(m=>m.data)},put(a,u,l){return r(a,{method:"PUT",body:u,headers:l?.headers}).then(m=>m.data)},delete(a,u){return r(a,{method:"DELETE",headers:u?.headers}).then(l=>l.data)}}}var R=b(()=>{});function N(t){return async e=>{if(!e.ok){let s=`HTTP ${e.status}: ${e.statusText}`;try{let n=await e.clone().json();n.error?s=n.error:n.message&&(s=n.message);}catch{}throw new Error(s)}return t==="json"?e.json():t==="text"?e.text():e}}function G(t){let e=new URLSearchParams;for(let[s,n]of Object.entries(t??{}))if(n!=null)if(n instanceof Date)e.append(s,n.toISOString());else if(Array.isArray(n))for(let o of n)e.append(`${s}[]`,o?.toString()??"");else e.append(s,n.toString());return e.size?`?${e}`:""}function T({baseURL:t,format:e="json"}){function s(n,o,r,{params:a={},headers:u={}}={}){let l={method:n,headers:{...u}};return r!=null&&(r instanceof FormData||r instanceof Blob||r instanceof ArrayBuffer||r instanceof URLSearchParams||r instanceof ReadableStream||typeof r=="string"?l.body=r:(l.body=JSON.stringify(r),l.headers["Content-Type"]??="application/json")),fetch(`${t}${o}${G(a)}`,l).then(N(e))}return {get(n,{params:o={},headers:r={}}={}){return s("GET",n,void 0,{params:o,headers:r})},post(n,o,{params:r={},headers:a={}}={}){return s("POST",n,o,{params:r,headers:a})},patch(n,o,{params:r={},headers:a={}}={}){return s("PATCH",n,o,{params:r,headers:a})},put(n,o,{params:r={},headers:a={}}={}){return s("PUT",n,o,{params:r,headers:a})},delete(n,{params:o={},headers:r={}}={}){return s("DELETE",n,void 0,{params:o,headers:r})}}}async function I(t){if(t.impl==="axios"){let{createAxiosDelegate:e}=await Promise.resolve().then(()=>(H(),A));return e(t)}if(t.impl==="better-fetch"){let{createBetterFetchDelegate:e}=await Promise.resolve().then(()=>(R(),B));return e(t)}return T(t)}async function P({baseURL:t}){let e=new Set,s=new Set,n=new Set,o=new Map,r=null,a=null;function u(){r&&(r.close(),r=null),a&&(a.abort(),a=null);}function l(g,f){let d=f.join(`
7
7
  `);if(g===""||g==="message")for(let i of s)i(d);if(g!==""&&g!=="message"){let i=o.get(g);if(i)for(let c of i)c(d);}}async function m(g){let f=g.getReader(),d=new TextDecoder,i="",c="",p=[];try{for(;;){let{done:h,value:D}=await f.read();if(h){p.length>0&&l(c,p);break}i+=d.decode(D,{stream:!0});let M=i.split(`
8
8
  `);i=M.pop()??"";for(let S of M){let w=S.endsWith("\r")?S.slice(0,-1):S;if(w===""){p.length>0&&(l(c,p),c="",p=[]);continue}if(w.startsWith(":"))continue;let y=w.indexOf(":"),C,F;switch(y===-1?(C=w,F=""):(C=w.slice(0,y),F=w[y+1]===" "?w.slice(y+2):w.slice(y+1)),C){case "data":p.push(F);break;case "event":c=F;break}}}}catch(h){if(h instanceof DOMException&&h.name==="AbortError")return;let D=new Event("error");for(let M of n)M(D);}}return {open(g){u();let f=g?.url??t,d=g?.method??"GET";if(d==="GET"){if(typeof EventSource>"u")throw new Error("EventSource is not available. This delegate only works in browser environments.");r=new EventSource(f),r.addEventListener("open",i=>{for(let c of e)c(i);}),r.addEventListener("error",i=>{for(let c of n)c(i);}),r.addEventListener("message",i=>{for(let c of s)c(i.data);});for(let[i,c]of o)for(let p of c){let h=D=>p(D.data);r.addEventListener(i,h);}}else {a=new AbortController;let i={method:d,headers:{Accept:"text/event-stream","Content-Type":"application/json",...g?.headers},signal:a.signal};g?.body!==void 0&&(i.body=JSON.stringify(g.body)),fetch(f,i).then(c=>{if(!c.ok){let h=new Event("error");for(let D of n)D(h);return}if(!c.body){let h=new Event("error");for(let D of n)D(h);return}let p=new Event("open");for(let h of e)h(p);m(c.body);}).catch(c=>{if(c instanceof DOMException&&c.name==="AbortError")return;let p=new Event("error");for(let h of n)h(p);});}},close(){u();},onOpen(g){return e.add(g),()=>e.delete(g)},onError(g){return n.add(g),()=>n.delete(g)},onMessage(g){return s.add(g),()=>s.delete(g)},subscribe(g,f){let d=o.get(g);if(d||(d=new Set,o.set(g,d)),d.add(f),r){let i=c=>f(c.data);return r.addEventListener(g,i),()=>{d.delete(f),r&&r.removeEventListener(g,i);}}return ()=>{d.delete(f);}}}}function W({baseURL:t,protocols:e,reconnectInterval:s=5e3,maxReconnectAttempts:n=10}){let o=null,r=null,a=0,u=new Set,l=new Set,m=new Set,g=new Set;function f(){r!==null||a>=n||(a++,r=window.setTimeout(()=>{r=null,d.connect();},s));}let d={connect:()=>{o&&o.close(),o=new WebSocket(t,e),o.onopen=i=>{a=0;for(let c of u)c(i);},o.onclose=i=>{for(let c of m)c(i);f();},o.onerror=i=>{for(let c of g)c(i);},o.onmessage=i=>{let c;try{c=JSON.parse(i.data);}catch{c=i.data;}for(let p of l)p(c);};},close(){o&&(o.close(),o=null),r!==null&&(window.clearTimeout(r),r=null);},send(i){o&&o.readyState===WebSocket.OPEN?o.send(JSON.stringify(i)):console.warn("WebSocket is not connected. Message not sent.");},onOpen(i){return u.add(i),()=>u.delete(i)},onClose(i){return m.add(i),()=>m.delete(i)},onError(i){return g.add(i),()=>g.delete(i)},onMessage(i){return l.add(i),()=>l.delete(i)}};return d.connect(),d}function v(t){return typeof t=="object"&&t!==null&&"get"in t&&"post"in t&&"patch"in t&&"put"in t&&"delete"in t}function O(t){return typeof t=="object"&&t!==null&&"connect"in t&&"send"in t&&"close"in t}var J=t=>typeof t=="object"&&t!==null&&"type"in t;function L(t){if(J(t)){if(t.type==="http")return K(t);if(t.type==="websocket")return W(t);if(t.type==="server-sent-event")return _(t);throw new Error("Unsupported delegate type")}return t}function K(t){let e=null,s=()=>(e||(e=I(t)),e);return {async get(n,o){return (await s()).get(n,o)},async post(n,o,r){return (await s()).post(n,o,r)},async patch(n,o,r){return (await s()).patch(n,o,r)},async put(n,o,r){return (await s()).put(n,o,r)},async delete(n,o){return (await s()).delete(n,o)}}}function _(t){let e=null,s=()=>(e||(e=P(t)),e);return {open(n){s().then(o=>o.open(n)).catch(o=>console.error("[SSE] Failed to open connection:",o));},close(){e&&e.then(n=>n.close()).catch(console.error);},onOpen(n){let o=null;return s().then(r=>{o=r.onOpen(n);}).catch(r=>console.error("[SSE] Failed to attach onOpen handler:",r)),()=>{o&&o();}},onError(n){let o=null;return s().then(r=>{o=r.onError(n);}).catch(r=>console.error("[SSE] Failed to attach onError handler:",r)),()=>{o&&o();}},onMessage(n){let o=null;return s().then(r=>{o=r.onMessage(n);}).catch(r=>console.error("[SSE] Failed to attach onMessage handler:",r)),()=>{o&&o();}},subscribe(n,o){let r=null;return s().then(a=>{r=a.subscribe(n,o);}).catch(a=>console.error(`[SSE] Failed to subscribe to event "${n}":`,a)),()=>{r&&r();}}}}function k(t,e){let s=n=>{let o=t[n];return async(r,a,u)=>{let l=n==="get"||n==="delete",m=l?void 0:a,f={method:n,url:r,headers:(l?a:u)?.headers??{},body:m};try{if(e.before){let c=await e.before(f);c&&typeof c=="object"&&(f={...f,...c});}let d=f.headers?{headers:f.headers}:void 0,i=l?await o(f.url,d):await o(f.url,f.body,d);if(e.after){let c=await e.after({method:n,url:f.url,response:i});c&&typeof c=="object"&&(i={...i,...c});}return i}catch(d){throw e.error&&await e.error(n,f.url,d,f.body),d}}};return {get:s("get"),post:s("post"),patch:s("patch"),put:s("put"),delete:s("delete")}}function $(t,e){return {...t,connect:()=>{e.beforeConnect&&Promise.resolve(e.beforeConnect()).catch(console.error),t.connect(),e.afterConnect&&Promise.resolve(e.afterConnect()).catch(console.error);},send:s=>{e.beforeSend&&Promise.resolve(e.beforeSend(s)).catch(console.error),t.send(s),e.afterSend&&Promise.resolve(e.afterSend(s)).catch(console.error);},close:()=>{e.beforeClose&&Promise.resolve(e.beforeClose()).catch(console.error),t.close(),e.afterClose&&Promise.resolve(e.afterClose()).catch(console.error);}}}function E(t,...e){return s=>{let{delegate:n,...o}=e.reduce((a,u)=>{let l=u(a);return Object.assign({},a,l)},{...s,delegate:L(t)});return {[t.name??"delegate"]:n,...o}}}function Fe(t,...e){return E(t,...e)}function Oe(t,...e){return E({...t,type:"http"},...e)}function Se(t,...e){return E({...t,type:"http"},...e)}function Ce(t,...e){return E({...t,type:"http",impl:"axios"},...e)}function be(t,...e){return E({...t,type:"http",impl:"better-fetch"},...e)}function xe(t,...e){return E({...t,type:"server-sent-event"},...e)}function Te(t,...e){return E({...t,type:"websocket"},...e)}function He(t){return ()=>({...t})}function Re(t){return e=>({...t(e),...e})}function z(t){let e=Object.keys(t.environments),s=t.default||e[0],n=s;function o(){return n}function r(u){if(t.environments[u])n=u,console.info(`[ENVIRONMENTS] Switched to environment: ${u} (${t.environments[u]})`);else {let l=t.fallback||s;console.warn(`[ENVIRONMENTS] Environment "${u}" not found, falling back to "${String(l)}"`),n=l;}}function a(){return t.environments[n]||t.environments[Object.keys(t.environments)[0]]}return {getCurrentEnvironment:o,setEnvironment:r,getBaseURL:a}}function V(t,e){let s=n=>{let o=e.getBaseURL();if(n.startsWith("http"))return n;let r=o.replace(/\/$/,""),a=n.startsWith("/")?n:`/${n}`,u=`${r}${a}`;return console.info(`[ENVIRONMENTS] Building URL: ${r} + ${a} = ${u}`),u};return k(t,{before:n=>({url:s(n.url)})})}function X(t,e){return $(t,{beforeConnect:()=>{console.info(`[ENVIRONMENTS] WebSocket connecting to: ${e.getBaseURL()}`);}})}function Y(t,e){return v(t)?V(t,e):O(t)?X(t,e):t}function We(t){return e=>{let{name:s}=t,n=z(t);return {...e,[s]:Y(e[s],n),environments:n}}}function qe(t){return ({delegate:e,...s})=>{let{name:n,...o}=t;return v(e)?{...s,delegate:k(e,o)}:{...s,delegate:e}}}function Q(){return typeof navigator<"u"&&navigator.onLine!==void 0?navigator.onLine:true}function Z(t){let e=new Map,s=t.cacheTTL??3e5;function n(a,u,l){let m=l?JSON.stringify(l):"";return `${a}:${u}:${m}`}function o(a){let u=e.get(a);return u?Date.now()-u.timestamp>u.ttl?(e.delete(a),null):u.data:null}function r(a,u){e.set(a,{data:u,timestamp:Date.now(),ttl:s});}return {isOnline:Q,clearCache:()=>e.clear(),getCacheSize:()=>e.size,getFromCache:o,setInCache:r,generateCacheKey:n}}function ee(t,e,s){let n=s.strategy??"cache-first",o=r=>{let a=t[r];return async(u,l,m)=>{let g=r==="get"||r==="delete",f=g?void 0:l,d=g?l:m,i=e.generateCacheKey(String(r),u,f);if(n==="cache-first"){let c=e.getFromCache(i);if(c)return console.info(`[OFFLINE] Cache hit for ${r} ${u}`),c;if(e.isOnline())try{let p=g?await a(u,d):await a(u,f,d);return e.setInCache(i,p),p}catch(p){throw console.error(`[OFFLINE] Network error for ${r} ${u}:`,p),p}throw new Error(`[OFFLINE] No cache available and offline for ${r} ${u}`)}if(n==="network-first"){if(e.isOnline())try{let p=g?await a(u,d):await a(u,f,d);return e.setInCache(i,p),p}catch(p){let h=e.getFromCache(i);if(h)return console.warn(`[OFFLINE] Network failed, using cache for ${r} ${u}`),h;throw p}let c=e.getFromCache(i);if(c)return c;throw new Error(`[OFFLINE] Offline and no cache for ${r} ${u}`)}if(n==="network-only"){if(!e.isOnline())throw new Error(`[OFFLINE] Network unavailable for ${r} ${u}`);return g?await a(u,d):await a(u,f,d)}throw new Error(`[OFFLINE] Unknown strategy: ${n}`)}};return {get:o("get"),post:o("post"),patch:o("patch"),put:o("put"),delete:o("delete")}}function te(t,e,s){return v(t)?ee(t,e,s):t}function Ue(t={}){return ({delegate:e,...s})=>{let n=Z(t);return {...s,delegate:te(e,n,t),offline:n}}}function ne({enableMetrics:t=false,enableTracing:e=false,enableLogging:s=false,onEvent:n=()=>{},onMetrics:o=()=>{}}){let r=[],a={requests:{total:0,success:0,errors:0},latency:{avg:0,min:Number.MAX_SAFE_INTEGER,max:Number.MIN_SAFE_INTEGER}};function u(i){r.push(i),g(i),s&&d(i),n(i);}function l(){return e?Math.random().toString(36).substring(2,15):void 0}function m(){return {requests:t?a.requests:{total:0,success:0,errors:0},latency:t?a.latency:{avg:0,min:0,max:0}}}function g(i){if(t){switch(i.type){case "request":a.requests.total++;break;case "response":a.requests.success++,i.duration&&f(i.duration);break;case "error":a.requests.errors++,i.duration&&f(i.duration);break}o(a);}}function f(i){let c=r.filter(p=>p.duration!==void 0).map(p=>p.duration).filter(p=>p>0);c.length>0&&(a.latency.avg=c.reduce((p,h)=>p+h,0)/c.length,a.latency.min=Math.min(...c),a.latency.max=Math.max(...c));}function d(i){let c=i.type==="error"?"error":"info",p=`[TELEMETRY] ${i.operation} ${i.duration?`(${i.duration}ms)`:""}`;i.type==="error"&&i.error?console[c](p,i.error):console[c](p);}return {recordEvent:u,generateTraceId:l,getMetrics:m}}function re(t){let e=new Map;return {before:s=>{let n=t.generateTraceId(),o=`${s.method.toUpperCase()} ${s.url}`,r=Date.now();e.set(o,{time:r,traceId:n}),t.recordEvent({timestamp:r,type:"request",operation:o,traceId:n});},after:s=>{let n=`${s.method.toUpperCase()} ${s.url}`,o=e.get(n);if(o){let r=Date.now()-o.time;t.recordEvent({timestamp:Date.now(),type:"response",operation:n,duration:r,status:200,traceId:o.traceId}),e.delete(n);}return s.response},error:(s,n,o)=>{let r=`${s.toUpperCase()} ${n}`,a=e.get(r);if(a){let u=Date.now()-a.time;t.recordEvent({timestamp:Date.now(),type:"error",operation:r,duration:u,error:o,traceId:a.traceId}),e.delete(r);}}}}function oe(t,e){let s=n=>{let o=e.generateTraceId(),r=Date.now();return e.recordEvent({timestamp:r,type:"request",operation:n,traceId:o}),{success:()=>{let a=Date.now()-r;e.recordEvent({timestamp:Date.now(),type:"response",operation:n,duration:a,status:200,traceId:o});},error:a=>{let u=Date.now()-r;e.recordEvent({timestamp:Date.now(),type:"error",operation:n,duration:u,error:a,traceId:o});}}};return {...t,connect:()=>{let n=s("connect");try{t.connect(),n.success();}catch(o){throw n.error(o),o}},send:n=>{let o=s("send");try{t.send(n),o.success();}catch(r){throw o.error(r),r}},close:()=>{let n=s("close");try{t.close(),n.success();}catch(o){throw n.error(o),o}},onMessage:n=>{let o=s("onMessage");try{let r=t.onMessage(n);return o.success(),r}catch(r){throw o.error(r),r}},onError:n=>t.onError(o=>{s("onError").error(new Error("WebSocket error")),n(o);})}}function se(t,e){return v(t)?k(t,re(e)):O(t)?oe(t,e):t}function Ke(t={}){return ({delegate:e,...s})=>{let n=ne(t);return {...s,delegate:se(e,n),telemetry:n}}}function at(...t){let e=t.reduce((o,r)=>Object.assign(o,r(o)),{}),{onInit:s,...n}=e;return typeof s=="function"&&s(n),n}exports.universalClient=at;exports.withAxiosDelegate=Ce;exports.withBetterFetchDelegate=be;exports.withDelegate=Fe;exports.withEnvironments=We;exports.withFetchDelegate=Se;exports.withHooks=He;exports.withHttpDelegate=Oe;exports.withInterceptor=qe;exports.withMethods=Re;exports.withOffline=Ue;exports.withSseDelegate=xe;exports.withTelemetry=Ke;exports.withWebSocketDelegate=Te;//# sourceMappingURL=index.js.map
9
9
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/delegate/http/axios-delegate.utils.ts","../src/utils/delegate/http/better-fetch-delegate.utils.ts","../src/utils/delegate/http/fetch-delegate.utils.ts","../src/utils/delegate/http-delegate.utils.ts","../src/utils/delegate/server-sent-event-delegate.utils.ts","../src/utils/delegate/websocket-delegate.utils.ts","../src/utils/delegate.utils.ts","../src/utils/delegate-middleware.utils.ts","../src/features/core/with-delegate/with-delegate.feature.ts","../src/features/core/with-hooks/with-hooks.feature.ts","../src/features/core/with-methods/with-methods.feature.ts","../src/features/delegate/with-environments/with-environments.feature.ts","../src/features/delegate/with-interceptor/with-interceptor.feature.ts","../src/features/delegate/with-offline/with-offline.feature.ts","../src/features/delegate/with-telemetry/with-telemetry.feature.ts","../src/universal-client.ts"],"names":["axios_delegate_utils_exports","__export","createAxiosDelegate","options","axiosModule","axios","baseURL","restOptions","instance","url","requestOptions","response","body","init_axios_delegate_utils","__esmMin","better_fetch_delegate_utils_exports","createBetterFetchDelegate","betterFetchModule","createFetch","init_better_fetch_delegate_utils","parseResponse","format","errorMessage","errorData","getURLSearchParams","params","query","key","value","item","createFetchDelegate","fetchRequest","method","headers","createHttpDelegate","createServerSentEventDelegate","openListeners","messageListeners","errorListeners","eventListeners","eventSource","abortController","closeExisting","dispatchSseEvent","eventType","dataLines","data","listener","callbacks","callback","readSseStream","reader","decoder","buffer","done","lines","line","cleanLine","colonIndex","field","fieldValue","error","errorEvent","event","eventName","handler","e","requestInit","openEvent","createWebSocketDelegate","protocols","reconnectInterval","maxReconnectAttempts","socket","reconnectTimer","reconnectAttempts","closeListeners","reconnect","delegate","message","isHttpDelegate","isWebSocketDelegate","isDelegateOptions","createDelegate","delegateOrOptions","createLazyHttpDelegate","createLazyServerSentEventDelegate","delegatePromise","ensureDelegate","openOptions","d","unsubscribe","wrapHttpDelegate","interceptor","wrapMethod","methodName","originalMethod","bodyOrOptions","optionsArg","isGetOrDelete","context","beforeResult","finalOptions","afterResult","wrapWebSocketDelegate","createDelegateFeature","features","input","rest","acc","feature","result","withDelegate","withHttpDelegate","withFetchDelegate","withAxiosDelegate","withBetterFetchDelegate","withSseDelegate","withWebSocketDelegate","withHooks","hooks","withMethods","methodCreator","createEnvironmentManager","config","environmentKeys","defaultKey","currentEnv","getCurrentEnvironment","setEnvironment","env","fallback","getBaseURL","wrapHttpDelegateWithEnvironments","envManager","buildFullURL","cleanBaseURL","cleanPath","fullURL","wrapWebSocketDelegateWithEnvironments","wrapDelegateWithEnvironments","withEnvironments","name","environments","withInterceptor","_name","isOnline","createOfflineManager","cache","cacheTTL","generateCacheKey","bodyStr","getFromCache","cacheKey","entry","setInCache","wrapHttpDelegateWithOffline","offlineManager","strategy","cached","wrapDelegateWithOffline","withOffline","createTelemetryCollector","enableMetrics","enableTracing","enableLogging","onEvent","onMetrics","events","metrics","recordEvent","updateMetrics","logEvent","generateTraceId","getMetrics","updateLatency","_duration","latencies","sum","lat","logLevel","createTelemetryHttpInterceptor","collector","startTimes","traceId","operation","startTime","startData","duration","wrapWebSocketDelegateWithTelemetry","createTimedOperation","op","wrapDelegateWithTelemetry","withTelemetry","telemetryCollector","universalClient","withFeatures","client","accumulator","onInit"],"mappings":"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","file":"index.js","sourcesContent":["import type { HttpRequestOptions } from '../../../types';\nimport type { CreateAxiosDelegateOptions } from './types';\n\nexport async function createAxiosDelegate(options: CreateAxiosDelegateOptions) {\n let axiosModule: {\n default: {\n create: (config: Record<string, unknown>) => unknown;\n get: (url: string, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n post: (url: string, data: unknown, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n patch: (url: string, data: unknown, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n put: (url: string, data: unknown, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n delete: (url: string, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n };\n } | null;\n try {\n axiosModule = await new Function('moduleName', 'return import(moduleName)')('axios');\n } catch {\n axiosModule = null;\n }\n\n if (!axiosModule) {\n throw new Error('Axios is not installed. Please install axios to use the axios delegate.');\n }\n\n const axios = axiosModule.default;\n const { baseURL, ...restOptions } = options;\n const instance = axios.create({ baseURL, ...restOptions }) as {\n get: (url: string, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n post: (url: string, data: unknown, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n patch: (url: string, data: unknown, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n put: (url: string, data: unknown, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n delete: (url: string, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n };\n\n return {\n get<T>(url: string, requestOptions?: HttpRequestOptions) {\n return instance.get(url, { headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n post<T>(url: string, body: unknown, requestOptions?: HttpRequestOptions) {\n return instance.post(url, body, { headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n patch<T>(url: string, body: unknown, requestOptions?: HttpRequestOptions) {\n return instance.patch(url, body, { headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n put<T>(url: string, body: unknown, requestOptions?: HttpRequestOptions) {\n return instance.put(url, body, { headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n delete<T>(url: string, requestOptions?: HttpRequestOptions) {\n return instance.delete(url, { headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n };\n}\n","import type { HttpRequestOptions } from '../../../types';\nimport type { CreateBetterFetchDelegateOptions } from './types';\n\nexport async function createBetterFetchDelegate(options: CreateBetterFetchDelegateOptions) {\n let betterFetchModule: { createFetch: (options: CreateBetterFetchDelegateOptions) => (url: string, options?: Record<string, unknown>) => Promise<{ data: unknown }> } | null;\n try {\n betterFetchModule = await new Function('moduleName', 'return import(moduleName)')('@better-fetch/fetch');\n } catch {\n betterFetchModule = null;\n }\n\n if (!betterFetchModule) {\n throw new Error('@better-fetch/fetch is not installed. Please install @better-fetch/fetch to use the better-fetch delegate.');\n }\n\n const { createFetch } = betterFetchModule;\n const { baseURL, ...restOptions } = options;\n const instance = createFetch({ baseURL, ...restOptions });\n\n return {\n get<T>(url: string, requestOptions?: HttpRequestOptions) {\n return instance(url, { headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n post<T>(url: string, body: unknown, requestOptions?: HttpRequestOptions) {\n return instance(url, { method: 'POST', body, headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n patch<T>(url: string, body: unknown, requestOptions?: HttpRequestOptions) {\n return instance(url, { method: 'PATCH', body, headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n put<T>(url: string, body: unknown, requestOptions?: HttpRequestOptions) {\n return instance(url, { method: 'PUT', body, headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n delete<T>(url: string, requestOptions?: HttpRequestOptions) {\n return instance(url, { method: 'DELETE', headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n };\n}\n","import type { HttpDelegate, HttpRequestOptions } from '../../../types';\nimport type { CreateFetchDelegateOptions } from './types';\n\nfunction parseResponse(format: CreateFetchDelegateOptions['format']) {\n return async (response: Response) => {\n if (!response.ok) {\n let errorMessage = `HTTP ${response.status}: ${response.statusText}`;\n\n try {\n const errorData = await response.clone().json();\n if (errorData.error) {\n errorMessage = errorData.error;\n } else if (errorData.message) {\n errorMessage = errorData.message;\n }\n } catch {\n // keep the default error message\n }\n\n throw new Error(errorMessage);\n }\n\n if (format === 'json') {\n return response.json();\n }\n\n if (format === 'text') {\n return response.text();\n }\n\n return response;\n };\n}\n\nfunction getURLSearchParams(params?: HttpRequestOptions['params']) {\n const query = new URLSearchParams();\n for (const [key, value] of Object.entries(params ?? {})) {\n if (value === undefined || value === null) {\n continue;\n }\n\n if (value instanceof Date) {\n query.append(key, value.toISOString());\n } else if (Array.isArray(value)) {\n for (const item of value) {\n query.append(`${key}[]`, item?.toString() ?? '');\n }\n } else {\n query.append(key, value.toString());\n }\n }\n\n return query.size ? `?${query}` : '';\n}\n\n/**\n * Creates a delegate to handle fetch requests.\n *\n * @param options - The options to be used in the delegate.\n * @returns A delegate to handle fetch requests.\n */\nexport function createFetchDelegate({ baseURL, format = 'json' }: Omit<CreateFetchDelegateOptions, 'type' | 'impl'>): HttpDelegate {\n function fetchRequest<T>(method: string, url: string, body?: unknown, { params = {}, headers = {} }: HttpRequestOptions = {}) {\n const options: RequestInit = {\n method,\n headers: {\n ...headers,\n },\n };\n\n if (body) {\n options.body = JSON.stringify(body);\n }\n\n return fetch(`${baseURL}${url}${getURLSearchParams(params)}`, options).then(parseResponse(format)) as Promise<T>;\n }\n\n return {\n get<T>(url: string, { params = {}, headers = {} }: HttpRequestOptions = {}) {\n return fetchRequest<T>('GET', url, undefined, { params, headers });\n },\n post<T>(url: string, body: unknown, { params = {}, headers = {} }: HttpRequestOptions = {}) {\n return fetchRequest<T>('POST', url, body, { params, headers });\n },\n patch<T>(url: string, body: unknown, { params = {}, headers = {} }: HttpRequestOptions = {}) {\n return fetchRequest<T>('PATCH', url, body, { params, headers });\n },\n put<T>(url: string, body: unknown, { params = {}, headers = {} }: HttpRequestOptions = {}) {\n return fetchRequest<T>('PUT', url, body, { params, headers });\n },\n delete<T>(url: string, { params = {}, headers = {} }: HttpRequestOptions = {}) {\n return fetchRequest<T>('DELETE', url, undefined, { params, headers });\n },\n };\n}\n","import type { HttpDelegate } from '../../types';\nimport { createFetchDelegate } from './http/fetch-delegate.utils';\nimport type { CreateAxiosDelegateOptions, CreateBetterFetchDelegateOptions, CreateFetchDelegateOptions } from './http/types';\n\nexport type HttpDelegateOptions = CreateFetchDelegateOptions | CreateBetterFetchDelegateOptions | CreateAxiosDelegateOptions;\n\nexport async function createHttpDelegate(options: HttpDelegateOptions): Promise<HttpDelegate> {\n if (options.impl === 'axios') {\n const { createAxiosDelegate } = await import('./http/axios-delegate.utils');\n return createAxiosDelegate(options);\n }\n\n if (options.impl === 'better-fetch') {\n const { createBetterFetchDelegate } = await import('./http/better-fetch-delegate.utils');\n return createBetterFetchDelegate(options);\n }\n\n return createFetchDelegate(options);\n}\n","import type { ServerSentEventDelegate, SseOpenOptions } from '../../types';\n\nexport interface CreateServerSentEventDelegateOptions {\n baseURL: string;\n}\n\nexport type ServerSentEventDelegateOptions = {\n type: 'server-sent-event';\n} & CreateServerSentEventDelegateOptions;\n\n/**\n * Creates a delegate to handle Server Sent Events.\n * Supports both GET (via EventSource) and POST (via fetch + ReadableStream) connections.\n * The delegate does not connect automatically — call `open()` to start the connection.\n *\n * @param options - The options to be used in the delegate.\n * @returns A delegate to handle Server Sent Events.\n */\nexport async function createServerSentEventDelegate({ baseURL }: CreateServerSentEventDelegateOptions): Promise<ServerSentEventDelegate> {\n const openListeners: Set<(event: Event) => void> = new Set();\n const messageListeners: Set<(data: unknown) => void> = new Set();\n const errorListeners: Set<(event: Event) => void> = new Set();\n const eventListeners: Map<string, Set<(data: unknown) => void>> = new Map();\n\n let eventSource: EventSource | null = null;\n let abortController: AbortController | null = null;\n\n function closeExisting(): void {\n if (eventSource) {\n eventSource.close();\n eventSource = null;\n }\n\n if (abortController) {\n abortController.abort();\n abortController = null;\n }\n }\n\n function dispatchSseEvent(eventType: string, dataLines: string[]): void {\n const data = dataLines.join('\\n');\n\n if (eventType === '' || eventType === 'message') {\n for (const listener of messageListeners) {\n listener(data);\n }\n }\n\n if (eventType !== '' && eventType !== 'message') {\n const callbacks = eventListeners.get(eventType);\n if (callbacks) {\n for (const callback of callbacks) {\n callback(data);\n }\n }\n }\n }\n\n async function readSseStream(body: ReadableStream<Uint8Array>): Promise<void> {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n let eventType = '';\n let dataLines: string[] = [];\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n if (dataLines.length > 0) {\n dispatchSseEvent(eventType, dataLines);\n }\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n const cleanLine = line.endsWith('\\r') ? line.slice(0, -1) : line;\n\n if (cleanLine === '') {\n if (dataLines.length > 0) {\n dispatchSseEvent(eventType, dataLines);\n eventType = '';\n dataLines = [];\n }\n continue;\n }\n\n if (cleanLine.startsWith(':')) {\n continue;\n }\n\n const colonIndex = cleanLine.indexOf(':');\n let field: string;\n let fieldValue: string;\n\n if (colonIndex === -1) {\n field = cleanLine;\n fieldValue = '';\n } else {\n field = cleanLine.slice(0, colonIndex);\n fieldValue = cleanLine[colonIndex + 1] === ' ' ? cleanLine.slice(colonIndex + 2) : cleanLine.slice(colonIndex + 1);\n }\n\n switch (field) {\n case 'data':\n dataLines.push(fieldValue);\n break;\n case 'event':\n eventType = fieldValue;\n break;\n }\n }\n }\n } catch (error) {\n if (error instanceof DOMException && error.name === 'AbortError') {\n return;\n }\n const errorEvent = new Event('error');\n for (const listener of errorListeners) {\n listener(errorEvent);\n }\n }\n }\n\n return {\n open(options?: SseOpenOptions): void {\n closeExisting();\n\n const url = options?.url ?? baseURL;\n const method = options?.method ?? 'GET';\n\n if (method === 'GET') {\n if (typeof EventSource === 'undefined') {\n throw new Error('EventSource is not available. This delegate only works in browser environments.');\n }\n\n eventSource = new EventSource(url);\n\n eventSource.addEventListener('open', (event) => {\n for (const listener of openListeners) {\n listener(event);\n }\n });\n\n eventSource.addEventListener('error', (event) => {\n for (const listener of errorListeners) {\n listener(event);\n }\n });\n\n eventSource.addEventListener('message', (event) => {\n for (const listener of messageListeners) {\n listener(event.data);\n }\n });\n\n for (const [eventName, callbacks] of eventListeners) {\n for (const callback of callbacks) {\n const handler = (e: MessageEvent) => callback(e.data);\n eventSource.addEventListener(eventName, handler as EventListener);\n }\n }\n } else {\n abortController = new AbortController();\n\n const requestInit: RequestInit = {\n method,\n headers: {\n Accept: 'text/event-stream',\n 'Content-Type': 'application/json',\n ...options?.headers,\n },\n signal: abortController.signal,\n };\n\n if (options?.body !== undefined) {\n requestInit.body = JSON.stringify(options.body);\n }\n\n fetch(url, requestInit)\n .then((response) => {\n if (!response.ok) {\n const errorEvent = new Event('error');\n for (const listener of errorListeners) {\n listener(errorEvent);\n }\n return;\n }\n\n if (!response.body) {\n const errorEvent = new Event('error');\n for (const listener of errorListeners) {\n listener(errorEvent);\n }\n return;\n }\n\n const openEvent = new Event('open');\n for (const listener of openListeners) {\n listener(openEvent);\n }\n\n readSseStream(response.body);\n })\n .catch((error) => {\n if (error instanceof DOMException && error.name === 'AbortError') {\n return;\n }\n const errorEvent = new Event('error');\n for (const listener of errorListeners) {\n listener(errorEvent);\n }\n });\n }\n },\n\n close(): void {\n closeExisting();\n },\n\n onOpen(callback: (event: Event) => void) {\n openListeners.add(callback);\n return () => openListeners.delete(callback);\n },\n\n onError(callback: (event: Event) => void) {\n errorListeners.add(callback);\n return () => errorListeners.delete(callback);\n },\n\n onMessage(callback: (data: unknown) => void) {\n messageListeners.add(callback);\n return () => messageListeners.delete(callback);\n },\n\n subscribe(event: string, callback: (data: unknown) => void) {\n let callbacks = eventListeners.get(event);\n if (!callbacks) {\n callbacks = new Set();\n eventListeners.set(event, callbacks);\n }\n callbacks.add(callback);\n\n if (eventSource) {\n const handler = (e: MessageEvent) => callback(e.data);\n eventSource.addEventListener(event, handler as EventListener);\n return () => {\n callbacks.delete(callback);\n if (eventSource) {\n eventSource.removeEventListener(event, handler as EventListener);\n }\n };\n }\n\n return () => {\n callbacks.delete(callback);\n };\n },\n };\n}\n","import type { WebSocketDelegate } from '../../types';\n\nexport interface CreateWebSocketDelegateOptions {\n baseURL: string;\n protocols?: string | string[];\n reconnectInterval?: number;\n maxReconnectAttempts?: number;\n}\n\nexport type WebSocketDelegateOptions = {\n type: 'websocket';\n} & CreateWebSocketDelegateOptions;\n\n/**\n * Creates a delegate to handle WebSocket requests.\n *\n * @param options - The options to be used in the delegate.\n * @returns A delegate to handle WebSocket requests.\n */\nexport function createWebSocketDelegate({ baseURL, protocols, reconnectInterval = 5000, maxReconnectAttempts = 10 }: CreateWebSocketDelegateOptions): WebSocketDelegate {\n let socket: WebSocket | null = null;\n let reconnectTimer: number | null = null;\n let reconnectAttempts = 0;\n const openListeners: Set<(event: Event) => void> = new Set();\n const messageListeners: Set<(data: unknown) => void> = new Set();\n const closeListeners: Set<(event: CloseEvent) => void> = new Set();\n const errorListeners: Set<(event: Event) => void> = new Set();\n\n function reconnect() {\n if (reconnectTimer !== null || reconnectAttempts >= maxReconnectAttempts) {\n return;\n }\n\n reconnectAttempts++;\n reconnectTimer = window.setTimeout(() => {\n reconnectTimer = null;\n delegate.connect();\n }, reconnectInterval);\n }\n\n const delegate: WebSocketDelegate = {\n connect: () => {\n if (socket) {\n socket.close();\n }\n\n socket = new WebSocket(baseURL, protocols);\n socket.onopen = (event) => {\n reconnectAttempts = 0;\n for (const listener of openListeners) {\n listener(event);\n }\n };\n\n socket.onclose = (event) => {\n for (const listener of closeListeners) {\n listener(event);\n }\n reconnect();\n };\n\n socket.onerror = (event) => {\n for (const listener of errorListeners) {\n listener(event);\n }\n };\n\n socket.onmessage = (event) => {\n let message: unknown;\n try {\n message = JSON.parse(event.data);\n } catch (_error) {\n message = event.data;\n }\n\n for (const listener of messageListeners) {\n listener(message);\n }\n };\n },\n close(): void {\n if (socket) {\n socket.close();\n socket = null;\n }\n\n if (reconnectTimer !== null) {\n window.clearTimeout(reconnectTimer);\n reconnectTimer = null;\n }\n },\n send(message: unknown): void {\n if (socket && socket.readyState === WebSocket.OPEN) {\n socket.send(JSON.stringify(message));\n } else {\n console.warn('WebSocket is not connected. Message not sent.');\n }\n },\n onOpen(callback: (event: Event) => void): () => void {\n openListeners.add(callback);\n return () => openListeners.delete(callback);\n },\n onClose(callback: (event: CloseEvent) => void): () => void {\n closeListeners.add(callback);\n return () => closeListeners.delete(callback);\n },\n onError(callback: (event: Event) => void): () => void {\n errorListeners.add(callback);\n return () => errorListeners.delete(callback);\n },\n onMessage(callback: (data: unknown) => void): () => void {\n messageListeners.add(callback);\n return () => messageListeners.delete(callback);\n },\n };\n\n delegate.connect();\n return delegate;\n}\n","import type { Delegate, HttpDelegate, ServerSentEventDelegate, SseOpenOptions, WebSocketDelegate } from '../types';\nimport { createHttpDelegate, createServerSentEventDelegate, createWebSocketDelegate, type HttpDelegateOptions, type ServerSentEventDelegateOptions, type WebSocketDelegateOptions } from './delegate';\n\nexport function isHttpDelegate(delegate: unknown): delegate is HttpDelegate {\n return typeof delegate === 'object' && delegate !== null && 'get' in delegate && 'post' in delegate && 'patch' in delegate && 'put' in delegate && 'delete' in delegate;\n}\n\nexport function isWebSocketDelegate(delegate: unknown): delegate is WebSocketDelegate {\n return typeof delegate === 'object' && delegate !== null && 'connect' in delegate && 'send' in delegate && 'close' in delegate;\n}\n\nexport function isServerSentEventDelegate(delegate: unknown): delegate is ServerSentEventDelegate {\n return typeof delegate === 'object' && delegate !== null && 'open' in delegate && 'onMessage' in delegate && 'onError' in delegate && 'onOpen' in delegate && 'subscribe' in delegate;\n}\n\nexport function isDelegate(delegate: unknown): delegate is Delegate {\n return isHttpDelegate(delegate) || isWebSocketDelegate(delegate) || isServerSentEventDelegate(delegate);\n}\n\nexport type DelegateOptions = HttpDelegateOptions | WebSocketDelegateOptions | ServerSentEventDelegateOptions;\n\nconst isDelegateOptions = (value: unknown): value is DelegateOptions => {\n return typeof value === 'object' && value !== null && 'type' in value;\n};\n\nexport function createDelegate(delegateOrOptions: Delegate | DelegateOptions): Delegate {\n if (isDelegateOptions(delegateOrOptions)) {\n if (delegateOrOptions.type === 'http') {\n return createLazyHttpDelegate(delegateOrOptions);\n }\n\n if (delegateOrOptions.type === 'websocket') {\n return createWebSocketDelegate(delegateOrOptions);\n }\n\n if (delegateOrOptions.type === 'server-sent-event') {\n return createLazyServerSentEventDelegate(delegateOrOptions);\n }\n\n throw new Error('Unsupported delegate type');\n }\n\n return delegateOrOptions;\n}\n\nfunction createLazyHttpDelegate(options: HttpDelegateOptions): HttpDelegate {\n let delegatePromise: Promise<HttpDelegate> | null = null;\n\n const ensureDelegate = () => {\n if (!delegatePromise) {\n delegatePromise = createHttpDelegate(options);\n }\n return delegatePromise;\n };\n\n return {\n async get<T>(url: string, requestOptions?: Record<string, unknown>): Promise<T> {\n const d = await ensureDelegate();\n return d.get<T>(url, requestOptions);\n },\n async post<T>(url: string, body: unknown, requestOptions?: Record<string, unknown>): Promise<T> {\n const d = await ensureDelegate();\n return d.post<T>(url, body, requestOptions);\n },\n async patch<T>(url: string, body: unknown, requestOptions?: Record<string, unknown>): Promise<T> {\n const d = await ensureDelegate();\n return d.patch<T>(url, body, requestOptions);\n },\n async put<T>(url: string, body: unknown, requestOptions?: Record<string, unknown>): Promise<T> {\n const d = await ensureDelegate();\n return d.put<T>(url, body, requestOptions);\n },\n async delete<T>(url: string, requestOptions?: Record<string, unknown>): Promise<T> {\n const d = await ensureDelegate();\n return d.delete<T>(url, requestOptions);\n },\n };\n}\n\nfunction createLazyServerSentEventDelegate(options: ServerSentEventDelegateOptions): ServerSentEventDelegate {\n let delegatePromise: Promise<ServerSentEventDelegate> | null = null;\n\n const ensureDelegate = () => {\n if (!delegatePromise) {\n delegatePromise = createServerSentEventDelegate(options);\n }\n return delegatePromise;\n };\n\n return {\n open(openOptions?: SseOpenOptions): void {\n ensureDelegate()\n .then((d) => d.open(openOptions))\n .catch((error) => console.error('[SSE] Failed to open connection:', error));\n },\n close(): void {\n if (delegatePromise) {\n delegatePromise.then((d) => d.close()).catch(console.error);\n }\n },\n onOpen(callback: (event: Event) => void): () => void {\n let unsubscribe: (() => void) | null = null;\n ensureDelegate()\n .then((d) => {\n unsubscribe = d.onOpen(callback);\n })\n .catch((error) => console.error('[SSE] Failed to attach onOpen handler:', error));\n return () => {\n if (unsubscribe) {\n unsubscribe();\n }\n };\n },\n onError(callback: (event: Event) => void): () => void {\n let unsubscribe: (() => void) | null = null;\n ensureDelegate()\n .then((d) => {\n unsubscribe = d.onError(callback);\n })\n .catch((error) => console.error('[SSE] Failed to attach onError handler:', error));\n return () => {\n if (unsubscribe) {\n unsubscribe();\n }\n };\n },\n onMessage(callback: (data: unknown) => void): () => void {\n let unsubscribe: (() => void) | null = null;\n ensureDelegate()\n .then((d) => {\n unsubscribe = d.onMessage(callback);\n })\n .catch((error) => console.error('[SSE] Failed to attach onMessage handler:', error));\n return () => {\n if (unsubscribe) {\n unsubscribe();\n }\n };\n },\n subscribe(event: string, callback: (data: unknown) => void): () => void {\n let unsubscribe: (() => void) | null = null;\n ensureDelegate()\n .then((d) => {\n unsubscribe = d.subscribe(event, callback);\n })\n .catch((error) => console.error(`[SSE] Failed to subscribe to event \"${event}\":`, error));\n return () => {\n if (unsubscribe) {\n unsubscribe();\n }\n };\n },\n };\n}\n","import type { HttpDelegate, WebSocketDelegate } from '../types';\n\n/**\n * Context for request interception, allows modifying request properties\n */\nexport interface RequestInterceptorContext {\n method: string;\n url: string;\n headers?: Record<string, string>;\n body?: unknown;\n}\n\n/**\n * Context for response interception\n */\nexport interface ResponseInterceptorContext<T = unknown> {\n method: string;\n url: string;\n response: T;\n}\n\n/**\n * Interceptor for HTTP delegate methods\n */\nexport interface HttpInterceptor {\n before?: (context: RequestInterceptorContext) => undefined | Partial<RequestInterceptorContext> | Promise<Partial<RequestInterceptorContext> | undefined>;\n after?: <T>(context: ResponseInterceptorContext<T>) => undefined | Partial<T> | Promise<Partial<T> | undefined>;\n error?: (method: string, url: string, error: Error, body?: unknown) => void | Promise<void>;\n}\n\n/**\n * Interceptor for WebSocket delegate methods\n */\nexport interface WebSocketInterceptor {\n beforeConnect?: () => void | Promise<void>;\n afterConnect?: () => void | Promise<void>;\n beforeSend?: (message: unknown) => void | Promise<void>;\n afterSend?: (message: unknown) => void | Promise<void>;\n beforeClose?: () => void | Promise<void>;\n afterClose?: () => void | Promise<void>;\n onError?: (error: Error) => void | Promise<void>;\n}\n\n/**\n * Wraps an HTTP delegate with interceptors for all methods\n */\nexport function wrapHttpDelegate(delegate: HttpDelegate, interceptor: HttpInterceptor): HttpDelegate {\n const wrapMethod = (methodName: 'get' | 'post' | 'patch' | 'put' | 'delete') => {\n const originalMethod = delegate[methodName];\n\n return async <T>(url: string, bodyOrOptions?: unknown, optionsArg?: unknown): Promise<T> => {\n // Handle overloaded signatures: (url) or (url, body) or (url, options) or (url, body, options)\n const isGetOrDelete = methodName === 'get' || methodName === 'delete';\n const body = isGetOrDelete ? undefined : bodyOrOptions;\n const options = isGetOrDelete ? (bodyOrOptions as { headers?: Record<string, string> }) : (optionsArg as { headers?: Record<string, string> });\n\n let context: RequestInterceptorContext = { method: methodName, url, headers: options?.headers ?? {}, body };\n try {\n if (interceptor.before) {\n const beforeResult = await interceptor.before(context);\n if (beforeResult && typeof beforeResult === 'object') {\n context = { ...context, ...beforeResult };\n }\n }\n\n const finalOptions = context.headers ? { headers: context.headers } : undefined;\n let response = isGetOrDelete\n ? await (originalMethod as (url: string, options?: { headers?: Record<string, string> }) => Promise<T>)(context.url, finalOptions)\n : await (originalMethod as (url: string, body: unknown, options?: { headers?: Record<string, string> }) => Promise<T>)(context.url, context.body, finalOptions);\n\n // After interceptor\n if (interceptor.after) {\n const afterResult = await interceptor.after<T>({ method: methodName, url: context.url, response });\n if (afterResult && typeof afterResult === 'object') {\n response = { ...response, ...afterResult };\n }\n }\n\n return response;\n } catch (error) {\n if (interceptor.error) {\n await interceptor.error(methodName, context.url, error as Error, context.body);\n }\n\n throw error;\n }\n };\n };\n\n return {\n get: wrapMethod('get') as <T>(url: string, options?: { headers?: Record<string, string> }) => Promise<T>,\n post: wrapMethod('post') as <T>(url: string, body: unknown, options?: { headers?: Record<string, string> }) => Promise<T>,\n patch: wrapMethod('patch') as <T>(url: string, body: unknown, options?: { headers?: Record<string, string> }) => Promise<T>,\n put: wrapMethod('put') as <T>(url: string, body: unknown, options?: { headers?: Record<string, string> }) => Promise<T>,\n delete: wrapMethod('delete') as <T>(url: string, options?: { headers?: Record<string, string> }) => Promise<T>,\n };\n}\n\n/**\n * Wraps a WebSocket delegate with interceptors for connect, send, and close\n */\nexport function wrapWebSocketDelegate(delegate: WebSocketDelegate, interceptor: WebSocketInterceptor): WebSocketDelegate {\n return {\n ...delegate,\n connect: () => {\n if (interceptor.beforeConnect) {\n Promise.resolve(interceptor.beforeConnect()).catch(console.error);\n }\n\n delegate.connect();\n\n if (interceptor.afterConnect) {\n Promise.resolve(interceptor.afterConnect()).catch(console.error);\n }\n },\n\n send: (message: unknown) => {\n if (interceptor.beforeSend) {\n Promise.resolve(interceptor.beforeSend(message)).catch(console.error);\n }\n\n delegate.send(message);\n\n if (interceptor.afterSend) {\n Promise.resolve(interceptor.afterSend(message)).catch(console.error);\n }\n },\n\n close: () => {\n if (interceptor.beforeClose) {\n Promise.resolve(interceptor.beforeClose()).catch(console.error);\n }\n\n delegate.close();\n\n if (interceptor.afterClose) {\n Promise.resolve(interceptor.afterClose()).catch(console.error);\n }\n },\n };\n}\n","import type { DelegateFeature, Feature, HttpDelegate, ServerSentEventDelegate, WebSocketDelegate } from '../../../types';\nimport { createDelegate, type DelegateOptions, type HttpDelegateOptions } from '../../../utils';\nimport type { CreateAxiosDelegateOptions, CreateBetterFetchDelegateOptions, CreateFetchDelegateOptions } from '../../../utils/delegate/http/types';\nimport type { CreateServerSentEventDelegateOptions } from '../../../utils/delegate/server-sent-event-delegate.utils';\nimport type { CreateWebSocketDelegateOptions } from '../../../utils/delegate/websocket-delegate.utils';\n\ntype DelegateFromOptions<O extends DelegateOptions> = O['type'] extends 'http' ? HttpDelegate : O['type'] extends 'websocket' ? WebSocketDelegate : O['type'] extends 'server-sent-event' ? ServerSentEventDelegate : never;\n\nfunction createDelegateFeature(options: DelegateOptions & { name?: string }, ...features: DelegateFeature[]): unknown {\n return (input: Record<string, unknown>) => {\n const { delegate, ...rest } = features.reduce(\n (acc, feature) => {\n const result = feature(acc);\n return Object.assign({}, acc, result);\n },\n { ...input, delegate: createDelegate(options) },\n );\n\n const delegateName = options.name ?? 'delegate';\n\n return {\n [delegateName]: delegate,\n ...rest,\n };\n };\n}\n\n/**\n * Add a delegate to the client.\n *\n * @param options - The options for the delegate.\n * @param features - The features to apply to the delegate.\n * @returns A feature that returns the delegate.\n */\nexport function withDelegate<const Options extends DelegateOptions & { name: string }>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { [key in Options['name']]: DelegateFromOptions<Options> }>;\nexport function withDelegate<const Options extends DelegateOptions>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { delegate: DelegateFromOptions<Options> }>;\nexport function withDelegate(options: DelegateOptions & { name?: string }, ...features: DelegateFeature[]): unknown {\n return createDelegateFeature(options, ...features);\n}\n\ntype WithNameOption = { name?: string };\ntype HttpDelegateShortcutOptions = Omit<HttpDelegateOptions, 'type'> & { impl: 'fetch' | 'axios' | 'better-fetch' } & WithNameOption;\ntype FetchDelegateShortcutOptions = Omit<CreateFetchDelegateOptions, 'type' | 'impl'> & WithNameOption;\ntype AxiosDelegateShortcutOptions = Omit<CreateAxiosDelegateOptions, 'type' | 'impl'> & WithNameOption;\ntype BetterFetchDelegateShortcutOptions = Omit<CreateBetterFetchDelegateOptions, 'type' | 'impl'> & WithNameOption;\ntype SseDelegateShortcutOptions = CreateServerSentEventDelegateOptions & WithNameOption;\ntype WebSocketDelegateShortcutOptions = CreateWebSocketDelegateOptions & WithNameOption;\n\nexport function withHttpDelegate<const Options extends HttpDelegateShortcutOptions & { name: string }>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { [key in Options['name']]: HttpDelegate }>;\nexport function withHttpDelegate(options: HttpDelegateShortcutOptions, ...features: DelegateFeature[]): Feature<unknown, { delegate: HttpDelegate }>;\nexport function withHttpDelegate(options: HttpDelegateShortcutOptions, ...features: DelegateFeature[]): unknown {\n return createDelegateFeature({ ...options, type: 'http' } as HttpDelegateOptions & WithNameOption, ...features);\n}\n\nexport function withFetchDelegate<const Options extends FetchDelegateShortcutOptions & { name: string }>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { [key in Options['name']]: HttpDelegate }>;\nexport function withFetchDelegate(options: FetchDelegateShortcutOptions, ...features: DelegateFeature[]): Feature<unknown, { delegate: HttpDelegate }>;\nexport function withFetchDelegate(options: FetchDelegateShortcutOptions, ...features: DelegateFeature[]): unknown {\n return createDelegateFeature({ ...options, type: 'http' }, ...features);\n}\n\nexport function withAxiosDelegate<const Options extends AxiosDelegateShortcutOptions & { name: string }>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { [key in Options['name']]: HttpDelegate }>;\nexport function withAxiosDelegate(options: AxiosDelegateShortcutOptions, ...features: DelegateFeature[]): Feature<unknown, { delegate: HttpDelegate }>;\nexport function withAxiosDelegate(options: AxiosDelegateShortcutOptions, ...features: DelegateFeature[]): unknown {\n return createDelegateFeature({ ...options, type: 'http', impl: 'axios' } as CreateAxiosDelegateOptions & WithNameOption, ...features);\n}\n\nexport function withBetterFetchDelegate<const Options extends BetterFetchDelegateShortcutOptions & { name: string }>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { [key in Options['name']]: HttpDelegate }>;\nexport function withBetterFetchDelegate(options: BetterFetchDelegateShortcutOptions, ...features: DelegateFeature[]): Feature<unknown, { delegate: HttpDelegate }>;\nexport function withBetterFetchDelegate(options: BetterFetchDelegateShortcutOptions, ...features: DelegateFeature[]): unknown {\n return createDelegateFeature({ ...options, type: 'http', impl: 'better-fetch' } as CreateBetterFetchDelegateOptions & WithNameOption, ...features);\n}\n\nexport function withSseDelegate<const Options extends SseDelegateShortcutOptions & { name: string }>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { [key in Options['name']]: ServerSentEventDelegate }>;\nexport function withSseDelegate(options: SseDelegateShortcutOptions, ...features: DelegateFeature[]): Feature<unknown, { delegate: ServerSentEventDelegate }>;\nexport function withSseDelegate(options: SseDelegateShortcutOptions, ...features: DelegateFeature[]): unknown {\n return createDelegateFeature({ ...options, type: 'server-sent-event' }, ...features);\n}\n\nexport function withWebSocketDelegate<const Options extends WebSocketDelegateShortcutOptions & { name: string }>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { [key in Options['name']]: WebSocketDelegate }>;\nexport function withWebSocketDelegate(options: WebSocketDelegateShortcutOptions, ...features: DelegateFeature[]): Feature<unknown, { delegate: WebSocketDelegate }>;\nexport function withWebSocketDelegate(options: WebSocketDelegateShortcutOptions, ...features: DelegateFeature[]): unknown {\n return createDelegateFeature({ ...options, type: 'websocket' }, ...features);\n}\n","import type { Feature } from '../../../types';\n\ninterface Hooks<Input> {\n onInit?: (input: Input) => void;\n}\n\n/**\n * Add hooks to the client.\n *\n * @param hooks - The hooks to be used in the feature.\n * @returns A feature that returns the hooks.\n */\nexport function withHooks<H extends Hooks<Input>, Input>(hooks: H): Feature<Input, Input> {\n return () => ({ ...hooks }) as unknown as Input;\n}\n","import type { Feature } from '../../../types';\n\n/**\n * Add methods to the client.\n *\n * @param methodCreator - The method creator to be used in the feature.\n * @returns A feature that returns the methods.\n */\nexport function withMethods<Methods, Input>(methodCreator: (input: Input) => Methods): Feature<Input, Methods & Input> {\n return (input) => ({ ...methodCreator(input), ...input });\n}\n","import type { Feature, HttpDelegate, WebSocketDelegate } from '../../../types';\nimport { isHttpDelegate, isWebSocketDelegate, wrapHttpDelegate, wrapWebSocketDelegate } from '../../../utils';\n\ntype Environments = Record<string, string>;\n\ninterface EnvironmentsConfig<Input, Environment extends Environments = Environments> {\n name: keyof Input;\n environments: Environment;\n default?: keyof Environment;\n fallback?: keyof Environment;\n}\n\ninterface EnvironmentManager<Environment extends Environments> {\n getCurrentEnvironment(): keyof Environment;\n setEnvironment(env: keyof Environment): void;\n getBaseURL(): string;\n}\n\nfunction createEnvironmentManager<Input, Environment extends Environments>(config: EnvironmentsConfig<Input, Environment>): EnvironmentManager<Environment> {\n const environmentKeys = Object.keys(config.environments);\n const defaultKey = config.default || environmentKeys[0];\n let currentEnv = defaultKey;\n\n function getCurrentEnvironment(): keyof Environment {\n return currentEnv;\n }\n\n function setEnvironment(env: string): void {\n if (!config.environments[env]) {\n const fallback = config.fallback || defaultKey;\n console.warn(`[ENVIRONMENTS] Environment \"${env}\" not found, falling back to \"${String(fallback)}\"`);\n currentEnv = fallback;\n } else {\n currentEnv = env;\n console.info(`[ENVIRONMENTS] Switched to environment: ${env} (${config.environments[env]})`);\n }\n }\n\n function getBaseURL() {\n return config.environments[currentEnv] || config.environments[Object.keys(config.environments)[0]];\n }\n\n return {\n getCurrentEnvironment,\n setEnvironment,\n getBaseURL,\n };\n}\n\nfunction wrapHttpDelegateWithEnvironments<Environment extends Environments>(delegate: HttpDelegate, envManager: EnvironmentManager<Environment>): HttpDelegate {\n const buildFullURL = (url: string) => {\n const baseURL = envManager.getBaseURL();\n if (url.startsWith('http')) {\n return url;\n }\n\n const cleanBaseURL = baseURL.replace(/\\/$/, '');\n const cleanPath = url.startsWith('/') ? url : `/${url}`;\n const fullURL = `${cleanBaseURL}${cleanPath}`;\n console.info(`[ENVIRONMENTS] Building URL: ${cleanBaseURL} + ${cleanPath} = ${fullURL}`);\n return fullURL;\n };\n\n return wrapHttpDelegate(delegate, {\n before: (context) => {\n return { url: buildFullURL(context.url) };\n },\n });\n}\n\nfunction wrapWebSocketDelegateWithEnvironments<Environment extends Environments>(delegate: WebSocketDelegate, envManager: EnvironmentManager<Environment>): WebSocketDelegate {\n return wrapWebSocketDelegate(delegate, {\n beforeConnect: () => {\n console.info(`[ENVIRONMENTS] WebSocket connecting to: ${envManager.getBaseURL()}`);\n },\n });\n}\n\nfunction wrapDelegateWithEnvironments<Environment extends Environments>(delegate: unknown, envManager: EnvironmentManager<Environment>): unknown {\n if (isHttpDelegate(delegate)) {\n return wrapHttpDelegateWithEnvironments(delegate, envManager);\n }\n\n if (isWebSocketDelegate(delegate)) {\n return wrapWebSocketDelegateWithEnvironments(delegate, envManager);\n }\n\n return delegate;\n}\n\nexport function withEnvironments<Input, Environment extends Environments>(config: EnvironmentsConfig<Input, Environment>): Feature<Input, Input & { environments: EnvironmentManager<Environment> }> {\n return (input: Input) => {\n const { name } = config;\n const environments = createEnvironmentManager(config);\n\n return {\n ...input,\n [name]: wrapDelegateWithEnvironments(input[name], environments),\n environments,\n };\n };\n}\n","import type { DelegateFeature } from '../../../types';\nimport { isHttpDelegate, wrapHttpDelegate } from '../../../utils';\nimport type { HttpInterceptor } from '../../../utils/delegate-middleware.utils';\n\nexport interface InterceptorConfig extends HttpInterceptor {\n name?: string;\n}\n\n/**\n * Add HTTP interceptor to the delegate.\n *\n * @param config - The interceptor configuration.\n * @returns A delegate feature that wraps the HTTP delegate with the interceptor.\n */\nexport function withInterceptor(config: InterceptorConfig): DelegateFeature {\n return ({ delegate, ...rest }) => {\n const { name: _name, ...interceptor } = config;\n\n if (isHttpDelegate(delegate)) {\n return {\n ...rest,\n delegate: wrapHttpDelegate(delegate, interceptor),\n };\n }\n\n return { ...rest, delegate };\n };\n}\n","import type { Delegate, DelegateFeature, HttpDelegate } from '../../../types';\nimport { isHttpDelegate } from '../../../utils';\n\ninterface OfflineConfig {\n /**\n * The strategy to use for the offline manager.\n * @default 'cache-first'\n */\n strategy?: 'cache-first' | 'network-first' | 'network-only';\n /**\n * The TTL for the cache in milliseconds.\n * @default 300000 (5 minutes)\n */\n cacheTTL?: number;\n}\n\ninterface CacheEntry<T = unknown> {\n data: T;\n timestamp: number;\n ttl: number;\n}\n\ninterface OfflineManager {\n isOnline(): boolean;\n clearCache(): void;\n getCacheSize(): number;\n}\n\ninterface ExtendedOfflineManager extends OfflineManager {\n getFromCache: <T>(key: string) => T | null;\n setInCache: <T>(key: string, data: T) => void;\n generateCacheKey: (method: string, url: string, body?: unknown) => string;\n}\n\nfunction isOnline(): boolean {\n return typeof navigator !== 'undefined' && navigator.onLine !== undefined ? navigator.onLine : true;\n}\n\nfunction createOfflineManager(config: OfflineConfig): ExtendedOfflineManager {\n const cache = new Map<string, CacheEntry>();\n const cacheTTL = config.cacheTTL ?? 300000;\n\n function generateCacheKey(method: string, url: string, body?: unknown): string {\n const bodyStr = body ? JSON.stringify(body) : '';\n return `${method}:${url}:${bodyStr}`;\n }\n\n function getFromCache<T>(cacheKey: string): T | null {\n const entry = cache.get(cacheKey);\n if (!entry) {\n return null;\n }\n\n if (Date.now() - entry.timestamp > entry.ttl) {\n cache.delete(cacheKey);\n return null;\n }\n\n return entry.data as T;\n }\n\n function setInCache<T>(cacheKey: string, data: T): void {\n cache.set(cacheKey, {\n data,\n timestamp: Date.now(),\n ttl: cacheTTL,\n });\n }\n\n return {\n isOnline,\n clearCache: () => cache.clear(),\n getCacheSize: () => cache.size,\n getFromCache: getFromCache,\n setInCache: setInCache,\n generateCacheKey: generateCacheKey,\n };\n}\n\nfunction wrapHttpDelegateWithOffline(delegate: HttpDelegate, offlineManager: ExtendedOfflineManager, config: OfflineConfig): HttpDelegate {\n const strategy = config.strategy ?? 'cache-first';\n\n const wrapMethod = <K extends keyof HttpDelegate>(methodName: K) => {\n const originalMethod = delegate[methodName];\n\n return async <T>(url: string, bodyOrOptions?: unknown, optionsArg?: unknown): Promise<T> => {\n // Handle overloaded signatures\n const isGetOrDelete = methodName === 'get' || methodName === 'delete';\n const body = isGetOrDelete ? undefined : bodyOrOptions;\n const options = isGetOrDelete ? bodyOrOptions : optionsArg;\n\n const cacheKey = offlineManager.generateCacheKey(String(methodName), url, body);\n\n if (strategy === 'cache-first') {\n const cached = offlineManager.getFromCache<T>(cacheKey);\n if (cached) {\n console.info(`[OFFLINE] Cache hit for ${methodName} ${url}`);\n return cached;\n }\n\n if (offlineManager.isOnline()) {\n try {\n const result = isGetOrDelete ? await (originalMethod as (url: string, options?: unknown) => Promise<T>)(url, options) : await (originalMethod as (url: string, body: unknown, options?: unknown) => Promise<T>)(url, body, options);\n offlineManager.setInCache(cacheKey, result);\n return result;\n } catch (error) {\n console.error(`[OFFLINE] Network error for ${methodName} ${url}:`, error);\n throw error;\n }\n }\n\n throw new Error(`[OFFLINE] No cache available and offline for ${methodName} ${url}`);\n }\n\n if (strategy === 'network-first') {\n if (offlineManager.isOnline()) {\n try {\n const result = isGetOrDelete ? await (originalMethod as (url: string, options?: unknown) => Promise<T>)(url, options) : await (originalMethod as (url: string, body: unknown, options?: unknown) => Promise<T>)(url, body, options);\n offlineManager.setInCache(cacheKey, result);\n return result;\n } catch (error) {\n const cached = offlineManager.getFromCache<T>(cacheKey);\n if (cached) {\n console.warn(`[OFFLINE] Network failed, using cache for ${methodName} ${url}`);\n return cached;\n }\n throw error;\n }\n }\n\n const cached = offlineManager.getFromCache<T>(cacheKey);\n if (cached) {\n return cached;\n }\n throw new Error(`[OFFLINE] Offline and no cache for ${methodName} ${url}`);\n }\n\n if (strategy === 'network-only') {\n if (!offlineManager.isOnline()) {\n throw new Error(`[OFFLINE] Network unavailable for ${methodName} ${url}`);\n }\n return isGetOrDelete ? await (originalMethod as (url: string, options?: unknown) => Promise<T>)(url, options) : await (originalMethod as (url: string, body: unknown, options?: unknown) => Promise<T>)(url, body, options);\n }\n\n throw new Error(`[OFFLINE] Unknown strategy: ${strategy}`);\n };\n };\n\n return {\n get: wrapMethod('get'),\n post: wrapMethod('post'),\n patch: wrapMethod('patch'),\n put: wrapMethod('put'),\n delete: wrapMethod('delete'),\n };\n}\n\nfunction wrapDelegateWithOffline(delegate: Delegate, offlineManager: ExtendedOfflineManager, config: OfflineConfig): Delegate {\n if (isHttpDelegate(delegate)) {\n return wrapHttpDelegateWithOffline(delegate, offlineManager, config);\n }\n\n return delegate;\n}\n\nexport function withOffline(config: OfflineConfig = {}): DelegateFeature<{ offline: OfflineManager }> {\n return ({ delegate, ...rest }) => {\n const offlineManager = createOfflineManager(config);\n\n return {\n ...rest,\n delegate: wrapDelegateWithOffline(delegate, offlineManager, config),\n offline: offlineManager,\n };\n };\n}\n","import type { Delegate, DelegateFeature, WebSocketDelegate } from '../../../types';\nimport { type HttpInterceptor, isHttpDelegate, isWebSocketDelegate, type ResponseInterceptorContext, wrapHttpDelegate } from '../../../utils';\n\ninterface TelemetryEvent {\n timestamp: number;\n type: 'request' | 'response' | 'error';\n operation: string;\n duration?: number;\n status?: number;\n error?: Error;\n traceId?: string;\n}\n\ninterface TelemetryMetrics {\n requests: { total: number; success: number; errors: number };\n latency: { avg: number; min: number; max: number };\n}\n\ninterface TelemetryCollector {\n recordEvent: (event: TelemetryEvent) => void;\n generateTraceId: () => string | undefined;\n getMetrics: () => TelemetryMetrics;\n}\n\ninterface TelemetryOptions {\n enableMetrics?: boolean;\n enableTracing?: boolean;\n enableLogging?: boolean;\n onEvent?: (event: TelemetryEvent) => void;\n onMetrics?: (metrics: TelemetryMetrics) => void;\n}\n\nfunction createTelemetryCollector({ enableMetrics = false, enableTracing = false, enableLogging = false, onEvent = () => {}, onMetrics = () => {} }: TelemetryOptions): TelemetryCollector {\n const events: TelemetryEvent[] = [];\n const metrics: TelemetryMetrics = {\n requests: { total: 0, success: 0, errors: 0 },\n latency: { avg: 0, min: Number.MAX_SAFE_INTEGER, max: Number.MIN_SAFE_INTEGER },\n };\n\n function recordEvent(event: TelemetryEvent): void {\n events.push(event);\n updateMetrics(event);\n\n if (enableLogging) {\n logEvent(event);\n }\n\n onEvent(event);\n }\n\n function generateTraceId(): string | undefined {\n return enableTracing ? Math.random().toString(36).substring(2, 15) : undefined;\n }\n\n function getMetrics(): TelemetryMetrics {\n return {\n requests: enableMetrics ? metrics.requests : { total: 0, success: 0, errors: 0 },\n latency: enableMetrics ? metrics.latency : { avg: 0, min: 0, max: 0 },\n };\n }\n\n function updateMetrics(event: TelemetryEvent): void {\n if (!enableMetrics) {\n return;\n }\n\n switch (event.type) {\n case 'request':\n metrics.requests.total++;\n break;\n\n case 'response':\n metrics.requests.success++;\n if (event.duration) {\n updateLatency(event.duration);\n }\n break;\n\n case 'error':\n metrics.requests.errors++;\n if (event.duration) {\n updateLatency(event.duration);\n }\n break;\n }\n\n onMetrics(metrics);\n }\n\n function updateLatency(_duration: number): void {\n const latencies = events\n .filter((event): event is TelemetryEvent & { duration: number } => event.duration !== undefined)\n .map((event) => event.duration)\n .filter((d) => d > 0);\n\n if (latencies.length > 0) {\n metrics.latency.avg = latencies.reduce((sum, lat) => sum + lat, 0) / latencies.length;\n metrics.latency.min = Math.min(...latencies);\n metrics.latency.max = Math.max(...latencies);\n }\n }\n\n function logEvent(event: TelemetryEvent): void {\n const logLevel = event.type === 'error' ? 'error' : 'info';\n const message = `[TELEMETRY] ${event.operation} ${event.duration ? `(${event.duration}ms)` : ''}`;\n\n if (event.type === 'error' && event.error) {\n console[logLevel](message, event.error);\n } else {\n console[logLevel](message);\n }\n }\n\n return {\n recordEvent,\n generateTraceId,\n getMetrics,\n };\n}\n\nfunction createTelemetryHttpInterceptor(collector: TelemetryCollector): HttpInterceptor {\n const startTimes = new Map<string, { time: number; traceId: string | undefined }>();\n\n return {\n before: (context: { method: string; url: string }) => {\n const traceId = collector.generateTraceId();\n const operation = `${context.method.toUpperCase()} ${context.url}`;\n const startTime = Date.now();\n\n startTimes.set(operation, { time: startTime, traceId });\n\n collector.recordEvent({\n timestamp: startTime,\n type: 'request',\n operation,\n traceId,\n });\n\n return undefined;\n },\n after: <T>(context: ResponseInterceptorContext<T>) => {\n const operation = `${context.method.toUpperCase()} ${context.url}`;\n const startData = startTimes.get(operation);\n\n if (startData) {\n const duration = Date.now() - startData.time;\n\n collector.recordEvent({\n timestamp: Date.now(),\n type: 'response',\n operation,\n duration,\n status: 200,\n traceId: startData.traceId,\n });\n\n startTimes.delete(operation);\n }\n\n return context.response;\n },\n error: (method: string, url: string, error: Error) => {\n const operation = `${method.toUpperCase()} ${url}`;\n const startData = startTimes.get(operation);\n\n if (startData) {\n const duration = Date.now() - startData.time;\n\n collector.recordEvent({\n timestamp: Date.now(),\n type: 'error',\n operation,\n duration,\n error,\n traceId: startData.traceId,\n });\n\n startTimes.delete(operation);\n }\n },\n } as HttpInterceptor;\n}\n\nfunction wrapWebSocketDelegateWithTelemetry(delegate: WebSocketDelegate, collector: TelemetryCollector): WebSocketDelegate {\n const createTimedOperation = (operation: string) => {\n const traceId = collector.generateTraceId();\n const startTime = Date.now();\n\n collector.recordEvent({\n timestamp: startTime,\n type: 'request',\n operation,\n traceId,\n });\n\n return {\n success: () => {\n const duration = Date.now() - startTime;\n collector.recordEvent({\n timestamp: Date.now(),\n type: 'response',\n operation,\n duration,\n status: 200,\n traceId,\n });\n },\n error: (error: Error) => {\n const duration = Date.now() - startTime;\n collector.recordEvent({\n timestamp: Date.now(),\n type: 'error',\n operation,\n duration,\n error,\n traceId,\n });\n },\n };\n };\n\n return {\n ...delegate,\n connect: () => {\n const op = createTimedOperation('connect');\n try {\n delegate.connect();\n op.success();\n } catch (error) {\n op.error(error as Error);\n throw error;\n }\n },\n send: (message: unknown) => {\n const op = createTimedOperation('send');\n try {\n delegate.send(message);\n op.success();\n } catch (error) {\n op.error(error as Error);\n throw error;\n }\n },\n close: () => {\n const op = createTimedOperation('close');\n try {\n delegate.close();\n op.success();\n } catch (error) {\n op.error(error as Error);\n throw error;\n }\n },\n onMessage: (callback: (data: unknown) => void) => {\n const op = createTimedOperation('onMessage');\n try {\n const result = delegate.onMessage(callback);\n op.success();\n return result;\n } catch (error) {\n op.error(error as Error);\n throw error;\n }\n },\n onError: (callback: (event: Event) => void) => {\n return delegate.onError((event: Event) => {\n const op = createTimedOperation('onError');\n op.error(new Error('WebSocket error'));\n callback(event);\n });\n },\n };\n}\n\nfunction wrapDelegateWithTelemetry(delegate: Delegate, collector: TelemetryCollector): Delegate {\n if (isHttpDelegate(delegate)) {\n return wrapHttpDelegate(delegate, createTelemetryHttpInterceptor(collector));\n }\n\n if (isWebSocketDelegate(delegate)) {\n return wrapWebSocketDelegateWithTelemetry(delegate, collector);\n }\n\n return delegate;\n}\n\nexport function withTelemetry(options: TelemetryOptions = {}): DelegateFeature<{ telemetry: TelemetryCollector }> {\n return ({ delegate, ...rest }) => {\n const telemetryCollector = createTelemetryCollector(options);\n\n return {\n ...rest,\n delegate: wrapDelegateWithTelemetry(delegate, telemetryCollector),\n telemetry: telemetryCollector,\n };\n };\n}\n","import type { Feature } from './types';\n\ntype Merge<A, B> = Omit<A, keyof B> & B;\n\n/**\n * Creates a universal client that combines multiple features.\n *\n * @param features - The features to be used in the client.\n * @returns A universal client that combines multiple features.\n */\nexport function universalClient<A>(featureA: Feature<unknown, A>): A;\nexport function universalClient<A, B>(featureA: Feature<unknown, A>, featureB: Feature<A, B>): Merge<A, B>;\nexport function universalClient<A, B, C>(featureA: Feature<unknown, A>, featureB: Feature<A, B>, featureC: Feature<Merge<A, B>, C>): Merge<Merge<A, B>, C>;\nexport function universalClient<A, B, C, D>(featureA: Feature<unknown, A>, featureB: Feature<A, B>, featureC: Feature<Merge<A, B>, C>, featureD: Feature<Merge<Merge<A, B>, C>, D>): Merge<Merge<Merge<A, B>, C>, D>;\nexport function universalClient<A, B, C, D, E>(\n featureA: Feature<unknown, A>,\n featureB: Feature<A, B>,\n featureC: Feature<Merge<A, B>, C>,\n featureD: Feature<Merge<Merge<A, B>, C>, D>,\n featureE: Feature<Merge<Merge<Merge<A, B>, C>, D>, E>,\n): Merge<Merge<Merge<Merge<A, B>, C>, D>, E>;\nexport function universalClient<A, B, C, D, E, F>(\n featureA: Feature<unknown, A>,\n featureB: Feature<A, B>,\n featureC: Feature<Merge<A, B>, C>,\n featureD: Feature<Merge<Merge<A, B>, C>, D>,\n featureE: Feature<Merge<Merge<Merge<A, B>, C>, D>, E>,\n featureF: Feature<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>,\n): Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>;\nexport function universalClient<A, B, C, D, E, F, G>(\n featureA: Feature<unknown, A>,\n featureB: Feature<A, B>,\n featureC: Feature<Merge<A, B>, C>,\n featureD: Feature<Merge<Merge<A, B>, C>, D>,\n featureE: Feature<Merge<Merge<Merge<A, B>, C>, D>, E>,\n featureF: Feature<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>,\n featureG: Feature<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>,\n): Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>;\nexport function universalClient<A, B, C, D, E, F, G, H>(\n featureA: Feature<unknown, A>,\n featureB: Feature<A, B>,\n featureC: Feature<Merge<A, B>, C>,\n featureD: Feature<Merge<Merge<A, B>, C>, D>,\n featureE: Feature<Merge<Merge<Merge<A, B>, C>, D>, E>,\n featureF: Feature<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>,\n featureG: Feature<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>,\n featureH: Feature<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>,\n): Merge<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>;\nexport function universalClient<A, B, C, D, E, F, G, H, I>(\n featureA: Feature<unknown, A>,\n featureB: Feature<A, B>,\n featureC: Feature<Merge<A, B>, C>,\n featureD: Feature<Merge<Merge<A, B>, C>, D>,\n featureE: Feature<Merge<Merge<Merge<A, B>, C>, D>, E>,\n featureF: Feature<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>,\n featureG: Feature<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>,\n featureH: Feature<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>,\n featureI: Feature<Merge<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>, I>,\n): Merge<Merge<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>, I>;\nexport function universalClient<A, B, C, D, E, F, G, H, I, J>(\n featureA: Feature<unknown, A>,\n featureB: Feature<A, B>,\n featureC: Feature<Merge<A, B>, C>,\n featureD: Feature<Merge<Merge<A, B>, C>, D>,\n featureE: Feature<Merge<Merge<Merge<A, B>, C>, D>, E>,\n featureF: Feature<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>,\n featureG: Feature<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>,\n featureH: Feature<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>,\n featureI: Feature<Merge<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>, I>,\n featureJ: Feature<Merge<Merge<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>, I>, J>,\n): Merge<Merge<Merge<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>, I>, J>;\nexport function universalClient(...withFeatures: Feature<unknown, unknown>[]): unknown;\nexport function universalClient(...withFeatures: Feature<unknown, unknown>[]) {\n // biome-ignore lint/performance/noAccumulatingSpread: needed for typescript\n const client = withFeatures.reduce((accumulator, feature) => Object.assign(accumulator, feature(accumulator)), {});\n\n // Extract onInit hook if present\n const { onInit, ...rest } = client as Record<string, unknown>;\n\n // Call onInit hook if it exists\n if (typeof onInit === 'function') {\n onInit(rest);\n }\n\n return rest;\n}\n"]}
1
+ {"version":3,"sources":["../src/utils/delegate/http/axios-delegate.utils.ts","../src/utils/delegate/http/better-fetch-delegate.utils.ts","../src/utils/delegate/http/fetch-delegate.utils.ts","../src/utils/delegate/http-delegate.utils.ts","../src/utils/delegate/server-sent-event-delegate.utils.ts","../src/utils/delegate/websocket-delegate.utils.ts","../src/utils/delegate.utils.ts","../src/utils/delegate-middleware.utils.ts","../src/features/core/with-delegate/with-delegate.feature.ts","../src/features/core/with-hooks/with-hooks.feature.ts","../src/features/core/with-methods/with-methods.feature.ts","../src/features/delegate/with-environments/with-environments.feature.ts","../src/features/delegate/with-interceptor/with-interceptor.feature.ts","../src/features/delegate/with-offline/with-offline.feature.ts","../src/features/delegate/with-telemetry/with-telemetry.feature.ts","../src/universal-client.ts"],"names":["axios_delegate_utils_exports","__export","createAxiosDelegate","options","axiosModule","axios","baseURL","restOptions","instance","url","requestOptions","response","body","init_axios_delegate_utils","__esmMin","better_fetch_delegate_utils_exports","createBetterFetchDelegate","betterFetchModule","createFetch","init_better_fetch_delegate_utils","parseResponse","format","errorMessage","errorData","getURLSearchParams","params","query","key","value","item","createFetchDelegate","fetchRequest","method","headers","createHttpDelegate","createServerSentEventDelegate","openListeners","messageListeners","errorListeners","eventListeners","eventSource","abortController","closeExisting","dispatchSseEvent","eventType","dataLines","data","listener","callbacks","callback","readSseStream","reader","decoder","buffer","done","lines","line","cleanLine","colonIndex","field","fieldValue","error","errorEvent","event","eventName","handler","e","requestInit","openEvent","createWebSocketDelegate","protocols","reconnectInterval","maxReconnectAttempts","socket","reconnectTimer","reconnectAttempts","closeListeners","reconnect","delegate","message","isHttpDelegate","isWebSocketDelegate","isDelegateOptions","createDelegate","delegateOrOptions","createLazyHttpDelegate","createLazyServerSentEventDelegate","delegatePromise","ensureDelegate","openOptions","d","unsubscribe","wrapHttpDelegate","interceptor","wrapMethod","methodName","originalMethod","bodyOrOptions","optionsArg","isGetOrDelete","context","beforeResult","finalOptions","afterResult","wrapWebSocketDelegate","createDelegateFeature","features","input","rest","acc","feature","result","withDelegate","withHttpDelegate","withFetchDelegate","withAxiosDelegate","withBetterFetchDelegate","withSseDelegate","withWebSocketDelegate","withHooks","hooks","withMethods","methodCreator","createEnvironmentManager","config","environmentKeys","defaultKey","currentEnv","getCurrentEnvironment","setEnvironment","env","fallback","getBaseURL","wrapHttpDelegateWithEnvironments","envManager","buildFullURL","cleanBaseURL","cleanPath","fullURL","wrapWebSocketDelegateWithEnvironments","wrapDelegateWithEnvironments","withEnvironments","name","environments","withInterceptor","_name","isOnline","createOfflineManager","cache","cacheTTL","generateCacheKey","bodyStr","getFromCache","cacheKey","entry","setInCache","wrapHttpDelegateWithOffline","offlineManager","strategy","cached","wrapDelegateWithOffline","withOffline","createTelemetryCollector","enableMetrics","enableTracing","enableLogging","onEvent","onMetrics","events","metrics","recordEvent","updateMetrics","logEvent","generateTraceId","getMetrics","updateLatency","_duration","latencies","sum","lat","logLevel","createTelemetryHttpInterceptor","collector","startTimes","traceId","operation","startTime","startData","duration","wrapWebSocketDelegateWithTelemetry","createTimedOperation","op","wrapDelegateWithTelemetry","withTelemetry","telemetryCollector","universalClient","withFeatures","client","accumulator","onInit"],"mappings":"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","file":"index.js","sourcesContent":["import type { HttpRequestOptions } from '../../../types';\nimport type { CreateAxiosDelegateOptions } from './types';\n\nexport async function createAxiosDelegate(options: CreateAxiosDelegateOptions) {\n let axiosModule: {\n default: {\n create: (config: Record<string, unknown>) => unknown;\n get: (url: string, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n post: (url: string, data: unknown, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n patch: (url: string, data: unknown, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n put: (url: string, data: unknown, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n delete: (url: string, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n };\n } | null;\n try {\n axiosModule = await new Function('moduleName', 'return import(moduleName)')('axios');\n } catch {\n axiosModule = null;\n }\n\n if (!axiosModule) {\n throw new Error('Axios is not installed. Please install axios to use the axios delegate.');\n }\n\n const axios = axiosModule.default;\n const { baseURL, ...restOptions } = options;\n const instance = axios.create({ baseURL, ...restOptions }) as {\n get: (url: string, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n post: (url: string, data: unknown, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n patch: (url: string, data: unknown, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n put: (url: string, data: unknown, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n delete: (url: string, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n };\n\n return {\n get<T>(url: string, requestOptions?: HttpRequestOptions) {\n return instance.get(url, { headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n post<T>(url: string, body: unknown, requestOptions?: HttpRequestOptions) {\n return instance.post(url, body, { headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n patch<T>(url: string, body: unknown, requestOptions?: HttpRequestOptions) {\n return instance.patch(url, body, { headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n put<T>(url: string, body: unknown, requestOptions?: HttpRequestOptions) {\n return instance.put(url, body, { headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n delete<T>(url: string, requestOptions?: HttpRequestOptions) {\n return instance.delete(url, { headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n };\n}\n","import type { HttpRequestOptions } from '../../../types';\nimport type { CreateBetterFetchDelegateOptions } from './types';\n\nexport async function createBetterFetchDelegate(options: CreateBetterFetchDelegateOptions) {\n let betterFetchModule: { createFetch: (options: CreateBetterFetchDelegateOptions) => (url: string, options?: Record<string, unknown>) => Promise<{ data: unknown }> } | null;\n try {\n betterFetchModule = await new Function('moduleName', 'return import(moduleName)')('@better-fetch/fetch');\n } catch {\n betterFetchModule = null;\n }\n\n if (!betterFetchModule) {\n throw new Error('@better-fetch/fetch is not installed. Please install @better-fetch/fetch to use the better-fetch delegate.');\n }\n\n const { createFetch } = betterFetchModule;\n const { baseURL, ...restOptions } = options;\n const instance = createFetch({ baseURL, ...restOptions });\n\n return {\n get<T>(url: string, requestOptions?: HttpRequestOptions) {\n return instance(url, { headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n post<T>(url: string, body: unknown, requestOptions?: HttpRequestOptions) {\n return instance(url, { method: 'POST', body, headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n patch<T>(url: string, body: unknown, requestOptions?: HttpRequestOptions) {\n return instance(url, { method: 'PATCH', body, headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n put<T>(url: string, body: unknown, requestOptions?: HttpRequestOptions) {\n return instance(url, { method: 'PUT', body, headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n delete<T>(url: string, requestOptions?: HttpRequestOptions) {\n return instance(url, { method: 'DELETE', headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n };\n}\n","import type { HttpDelegate, HttpRequestOptions } from '../../../types';\nimport type { CreateFetchDelegateOptions } from './types';\n\nfunction parseResponse(format: CreateFetchDelegateOptions['format']) {\n return async (response: Response) => {\n if (!response.ok) {\n let errorMessage = `HTTP ${response.status}: ${response.statusText}`;\n\n try {\n const errorData = await response.clone().json();\n if (errorData.error) {\n errorMessage = errorData.error;\n } else if (errorData.message) {\n errorMessage = errorData.message;\n }\n } catch {\n // keep the default error message\n }\n\n throw new Error(errorMessage);\n }\n\n if (format === 'json') {\n return response.json();\n }\n\n if (format === 'text') {\n return response.text();\n }\n\n return response;\n };\n}\n\nfunction getURLSearchParams(params?: HttpRequestOptions['params']) {\n const query = new URLSearchParams();\n for (const [key, value] of Object.entries(params ?? {})) {\n if (value === undefined || value === null) {\n continue;\n }\n\n if (value instanceof Date) {\n query.append(key, value.toISOString());\n } else if (Array.isArray(value)) {\n for (const item of value) {\n query.append(`${key}[]`, item?.toString() ?? '');\n }\n } else {\n query.append(key, value.toString());\n }\n }\n\n return query.size ? `?${query}` : '';\n}\n\n/**\n * Creates a delegate to handle fetch requests.\n *\n * @param options - The options to be used in the delegate.\n * @returns A delegate to handle fetch requests.\n */\nexport function createFetchDelegate({ baseURL, format = 'json' }: Omit<CreateFetchDelegateOptions, 'type' | 'impl'>): HttpDelegate {\n function fetchRequest<T>(method: string, url: string, body?: unknown, { params = {}, headers = {} }: HttpRequestOptions = {}) {\n const options: RequestInit = {\n method,\n headers: {\n ...headers,\n },\n };\n\n if (body !== undefined && body !== null) {\n if (body instanceof FormData || body instanceof Blob || body instanceof ArrayBuffer || body instanceof URLSearchParams || body instanceof ReadableStream || typeof body === 'string') {\n options.body = body;\n } else {\n options.body = JSON.stringify(body);\n (options.headers as Record<string, string>)['Content-Type'] ??= 'application/json';\n }\n }\n\n return fetch(`${baseURL}${url}${getURLSearchParams(params)}`, options).then(parseResponse(format)) as Promise<T>;\n }\n\n return {\n get<T>(url: string, { params = {}, headers = {} }: HttpRequestOptions = {}) {\n return fetchRequest<T>('GET', url, undefined, { params, headers });\n },\n post<T>(url: string, body: unknown, { params = {}, headers = {} }: HttpRequestOptions = {}) {\n return fetchRequest<T>('POST', url, body, { params, headers });\n },\n patch<T>(url: string, body: unknown, { params = {}, headers = {} }: HttpRequestOptions = {}) {\n return fetchRequest<T>('PATCH', url, body, { params, headers });\n },\n put<T>(url: string, body: unknown, { params = {}, headers = {} }: HttpRequestOptions = {}) {\n return fetchRequest<T>('PUT', url, body, { params, headers });\n },\n delete<T>(url: string, { params = {}, headers = {} }: HttpRequestOptions = {}) {\n return fetchRequest<T>('DELETE', url, undefined, { params, headers });\n },\n };\n}\n","import type { HttpDelegate } from '../../types';\nimport { createFetchDelegate } from './http/fetch-delegate.utils';\nimport type { CreateAxiosDelegateOptions, CreateBetterFetchDelegateOptions, CreateFetchDelegateOptions } from './http/types';\n\nexport type HttpDelegateOptions = CreateFetchDelegateOptions | CreateBetterFetchDelegateOptions | CreateAxiosDelegateOptions;\n\nexport async function createHttpDelegate(options: HttpDelegateOptions): Promise<HttpDelegate> {\n if (options.impl === 'axios') {\n const { createAxiosDelegate } = await import('./http/axios-delegate.utils');\n return createAxiosDelegate(options);\n }\n\n if (options.impl === 'better-fetch') {\n const { createBetterFetchDelegate } = await import('./http/better-fetch-delegate.utils');\n return createBetterFetchDelegate(options);\n }\n\n return createFetchDelegate(options);\n}\n","import type { ServerSentEventDelegate, SseOpenOptions } from '../../types';\n\nexport interface CreateServerSentEventDelegateOptions {\n baseURL: string;\n}\n\nexport type ServerSentEventDelegateOptions = {\n type: 'server-sent-event';\n} & CreateServerSentEventDelegateOptions;\n\n/**\n * Creates a delegate to handle Server Sent Events.\n * Supports both GET (via EventSource) and POST (via fetch + ReadableStream) connections.\n * The delegate does not connect automatically — call `open()` to start the connection.\n *\n * @param options - The options to be used in the delegate.\n * @returns A delegate to handle Server Sent Events.\n */\nexport async function createServerSentEventDelegate({ baseURL }: CreateServerSentEventDelegateOptions): Promise<ServerSentEventDelegate> {\n const openListeners: Set<(event: Event) => void> = new Set();\n const messageListeners: Set<(data: unknown) => void> = new Set();\n const errorListeners: Set<(event: Event) => void> = new Set();\n const eventListeners: Map<string, Set<(data: unknown) => void>> = new Map();\n\n let eventSource: EventSource | null = null;\n let abortController: AbortController | null = null;\n\n function closeExisting(): void {\n if (eventSource) {\n eventSource.close();\n eventSource = null;\n }\n\n if (abortController) {\n abortController.abort();\n abortController = null;\n }\n }\n\n function dispatchSseEvent(eventType: string, dataLines: string[]): void {\n const data = dataLines.join('\\n');\n\n if (eventType === '' || eventType === 'message') {\n for (const listener of messageListeners) {\n listener(data);\n }\n }\n\n if (eventType !== '' && eventType !== 'message') {\n const callbacks = eventListeners.get(eventType);\n if (callbacks) {\n for (const callback of callbacks) {\n callback(data);\n }\n }\n }\n }\n\n async function readSseStream(body: ReadableStream<Uint8Array>): Promise<void> {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n let eventType = '';\n let dataLines: string[] = [];\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n if (dataLines.length > 0) {\n dispatchSseEvent(eventType, dataLines);\n }\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n const cleanLine = line.endsWith('\\r') ? line.slice(0, -1) : line;\n\n if (cleanLine === '') {\n if (dataLines.length > 0) {\n dispatchSseEvent(eventType, dataLines);\n eventType = '';\n dataLines = [];\n }\n continue;\n }\n\n if (cleanLine.startsWith(':')) {\n continue;\n }\n\n const colonIndex = cleanLine.indexOf(':');\n let field: string;\n let fieldValue: string;\n\n if (colonIndex === -1) {\n field = cleanLine;\n fieldValue = '';\n } else {\n field = cleanLine.slice(0, colonIndex);\n fieldValue = cleanLine[colonIndex + 1] === ' ' ? cleanLine.slice(colonIndex + 2) : cleanLine.slice(colonIndex + 1);\n }\n\n switch (field) {\n case 'data':\n dataLines.push(fieldValue);\n break;\n case 'event':\n eventType = fieldValue;\n break;\n }\n }\n }\n } catch (error) {\n if (error instanceof DOMException && error.name === 'AbortError') {\n return;\n }\n const errorEvent = new Event('error');\n for (const listener of errorListeners) {\n listener(errorEvent);\n }\n }\n }\n\n return {\n open(options?: SseOpenOptions): void {\n closeExisting();\n\n const url = options?.url ?? baseURL;\n const method = options?.method ?? 'GET';\n\n if (method === 'GET') {\n if (typeof EventSource === 'undefined') {\n throw new Error('EventSource is not available. This delegate only works in browser environments.');\n }\n\n eventSource = new EventSource(url);\n\n eventSource.addEventListener('open', (event) => {\n for (const listener of openListeners) {\n listener(event);\n }\n });\n\n eventSource.addEventListener('error', (event) => {\n for (const listener of errorListeners) {\n listener(event);\n }\n });\n\n eventSource.addEventListener('message', (event) => {\n for (const listener of messageListeners) {\n listener(event.data);\n }\n });\n\n for (const [eventName, callbacks] of eventListeners) {\n for (const callback of callbacks) {\n const handler = (e: MessageEvent) => callback(e.data);\n eventSource.addEventListener(eventName, handler as EventListener);\n }\n }\n } else {\n abortController = new AbortController();\n\n const requestInit: RequestInit = {\n method,\n headers: {\n Accept: 'text/event-stream',\n 'Content-Type': 'application/json',\n ...options?.headers,\n },\n signal: abortController.signal,\n };\n\n if (options?.body !== undefined) {\n requestInit.body = JSON.stringify(options.body);\n }\n\n fetch(url, requestInit)\n .then((response) => {\n if (!response.ok) {\n const errorEvent = new Event('error');\n for (const listener of errorListeners) {\n listener(errorEvent);\n }\n return;\n }\n\n if (!response.body) {\n const errorEvent = new Event('error');\n for (const listener of errorListeners) {\n listener(errorEvent);\n }\n return;\n }\n\n const openEvent = new Event('open');\n for (const listener of openListeners) {\n listener(openEvent);\n }\n\n readSseStream(response.body);\n })\n .catch((error) => {\n if (error instanceof DOMException && error.name === 'AbortError') {\n return;\n }\n const errorEvent = new Event('error');\n for (const listener of errorListeners) {\n listener(errorEvent);\n }\n });\n }\n },\n\n close(): void {\n closeExisting();\n },\n\n onOpen(callback: (event: Event) => void) {\n openListeners.add(callback);\n return () => openListeners.delete(callback);\n },\n\n onError(callback: (event: Event) => void) {\n errorListeners.add(callback);\n return () => errorListeners.delete(callback);\n },\n\n onMessage(callback: (data: unknown) => void) {\n messageListeners.add(callback);\n return () => messageListeners.delete(callback);\n },\n\n subscribe(event: string, callback: (data: unknown) => void) {\n let callbacks = eventListeners.get(event);\n if (!callbacks) {\n callbacks = new Set();\n eventListeners.set(event, callbacks);\n }\n callbacks.add(callback);\n\n if (eventSource) {\n const handler = (e: MessageEvent) => callback(e.data);\n eventSource.addEventListener(event, handler as EventListener);\n return () => {\n callbacks.delete(callback);\n if (eventSource) {\n eventSource.removeEventListener(event, handler as EventListener);\n }\n };\n }\n\n return () => {\n callbacks.delete(callback);\n };\n },\n };\n}\n","import type { WebSocketDelegate } from '../../types';\n\nexport interface CreateWebSocketDelegateOptions {\n baseURL: string;\n protocols?: string | string[];\n reconnectInterval?: number;\n maxReconnectAttempts?: number;\n}\n\nexport type WebSocketDelegateOptions = {\n type: 'websocket';\n} & CreateWebSocketDelegateOptions;\n\n/**\n * Creates a delegate to handle WebSocket requests.\n *\n * @param options - The options to be used in the delegate.\n * @returns A delegate to handle WebSocket requests.\n */\nexport function createWebSocketDelegate({ baseURL, protocols, reconnectInterval = 5000, maxReconnectAttempts = 10 }: CreateWebSocketDelegateOptions): WebSocketDelegate {\n let socket: WebSocket | null = null;\n let reconnectTimer: number | null = null;\n let reconnectAttempts = 0;\n const openListeners: Set<(event: Event) => void> = new Set();\n const messageListeners: Set<(data: unknown) => void> = new Set();\n const closeListeners: Set<(event: CloseEvent) => void> = new Set();\n const errorListeners: Set<(event: Event) => void> = new Set();\n\n function reconnect() {\n if (reconnectTimer !== null || reconnectAttempts >= maxReconnectAttempts) {\n return;\n }\n\n reconnectAttempts++;\n reconnectTimer = window.setTimeout(() => {\n reconnectTimer = null;\n delegate.connect();\n }, reconnectInterval);\n }\n\n const delegate: WebSocketDelegate = {\n connect: () => {\n if (socket) {\n socket.close();\n }\n\n socket = new WebSocket(baseURL, protocols);\n socket.onopen = (event) => {\n reconnectAttempts = 0;\n for (const listener of openListeners) {\n listener(event);\n }\n };\n\n socket.onclose = (event) => {\n for (const listener of closeListeners) {\n listener(event);\n }\n reconnect();\n };\n\n socket.onerror = (event) => {\n for (const listener of errorListeners) {\n listener(event);\n }\n };\n\n socket.onmessage = (event) => {\n let message: unknown;\n try {\n message = JSON.parse(event.data);\n } catch (_error) {\n message = event.data;\n }\n\n for (const listener of messageListeners) {\n listener(message);\n }\n };\n },\n close(): void {\n if (socket) {\n socket.close();\n socket = null;\n }\n\n if (reconnectTimer !== null) {\n window.clearTimeout(reconnectTimer);\n reconnectTimer = null;\n }\n },\n send(message: unknown): void {\n if (socket && socket.readyState === WebSocket.OPEN) {\n socket.send(JSON.stringify(message));\n } else {\n console.warn('WebSocket is not connected. Message not sent.');\n }\n },\n onOpen(callback: (event: Event) => void): () => void {\n openListeners.add(callback);\n return () => openListeners.delete(callback);\n },\n onClose(callback: (event: CloseEvent) => void): () => void {\n closeListeners.add(callback);\n return () => closeListeners.delete(callback);\n },\n onError(callback: (event: Event) => void): () => void {\n errorListeners.add(callback);\n return () => errorListeners.delete(callback);\n },\n onMessage(callback: (data: unknown) => void): () => void {\n messageListeners.add(callback);\n return () => messageListeners.delete(callback);\n },\n };\n\n delegate.connect();\n return delegate;\n}\n","import type { Delegate, HttpDelegate, ServerSentEventDelegate, SseOpenOptions, WebSocketDelegate } from '../types';\nimport { createHttpDelegate, createServerSentEventDelegate, createWebSocketDelegate, type HttpDelegateOptions, type ServerSentEventDelegateOptions, type WebSocketDelegateOptions } from './delegate';\n\nexport function isHttpDelegate(delegate: unknown): delegate is HttpDelegate {\n return typeof delegate === 'object' && delegate !== null && 'get' in delegate && 'post' in delegate && 'patch' in delegate && 'put' in delegate && 'delete' in delegate;\n}\n\nexport function isWebSocketDelegate(delegate: unknown): delegate is WebSocketDelegate {\n return typeof delegate === 'object' && delegate !== null && 'connect' in delegate && 'send' in delegate && 'close' in delegate;\n}\n\nexport function isServerSentEventDelegate(delegate: unknown): delegate is ServerSentEventDelegate {\n return typeof delegate === 'object' && delegate !== null && 'open' in delegate && 'onMessage' in delegate && 'onError' in delegate && 'onOpen' in delegate && 'subscribe' in delegate;\n}\n\nexport function isDelegate(delegate: unknown): delegate is Delegate {\n return isHttpDelegate(delegate) || isWebSocketDelegate(delegate) || isServerSentEventDelegate(delegate);\n}\n\nexport type DelegateOptions = HttpDelegateOptions | WebSocketDelegateOptions | ServerSentEventDelegateOptions;\n\nconst isDelegateOptions = (value: unknown): value is DelegateOptions => {\n return typeof value === 'object' && value !== null && 'type' in value;\n};\n\nexport function createDelegate(delegateOrOptions: Delegate | DelegateOptions): Delegate {\n if (isDelegateOptions(delegateOrOptions)) {\n if (delegateOrOptions.type === 'http') {\n return createLazyHttpDelegate(delegateOrOptions);\n }\n\n if (delegateOrOptions.type === 'websocket') {\n return createWebSocketDelegate(delegateOrOptions);\n }\n\n if (delegateOrOptions.type === 'server-sent-event') {\n return createLazyServerSentEventDelegate(delegateOrOptions);\n }\n\n throw new Error('Unsupported delegate type');\n }\n\n return delegateOrOptions;\n}\n\nfunction createLazyHttpDelegate(options: HttpDelegateOptions): HttpDelegate {\n let delegatePromise: Promise<HttpDelegate> | null = null;\n\n const ensureDelegate = () => {\n if (!delegatePromise) {\n delegatePromise = createHttpDelegate(options);\n }\n return delegatePromise;\n };\n\n return {\n async get<T>(url: string, requestOptions?: Record<string, unknown>): Promise<T> {\n const d = await ensureDelegate();\n return d.get<T>(url, requestOptions);\n },\n async post<T>(url: string, body: unknown, requestOptions?: Record<string, unknown>): Promise<T> {\n const d = await ensureDelegate();\n return d.post<T>(url, body, requestOptions);\n },\n async patch<T>(url: string, body: unknown, requestOptions?: Record<string, unknown>): Promise<T> {\n const d = await ensureDelegate();\n return d.patch<T>(url, body, requestOptions);\n },\n async put<T>(url: string, body: unknown, requestOptions?: Record<string, unknown>): Promise<T> {\n const d = await ensureDelegate();\n return d.put<T>(url, body, requestOptions);\n },\n async delete<T>(url: string, requestOptions?: Record<string, unknown>): Promise<T> {\n const d = await ensureDelegate();\n return d.delete<T>(url, requestOptions);\n },\n };\n}\n\nfunction createLazyServerSentEventDelegate(options: ServerSentEventDelegateOptions): ServerSentEventDelegate {\n let delegatePromise: Promise<ServerSentEventDelegate> | null = null;\n\n const ensureDelegate = () => {\n if (!delegatePromise) {\n delegatePromise = createServerSentEventDelegate(options);\n }\n return delegatePromise;\n };\n\n return {\n open(openOptions?: SseOpenOptions): void {\n ensureDelegate()\n .then((d) => d.open(openOptions))\n .catch((error) => console.error('[SSE] Failed to open connection:', error));\n },\n close(): void {\n if (delegatePromise) {\n delegatePromise.then((d) => d.close()).catch(console.error);\n }\n },\n onOpen(callback: (event: Event) => void): () => void {\n let unsubscribe: (() => void) | null = null;\n ensureDelegate()\n .then((d) => {\n unsubscribe = d.onOpen(callback);\n })\n .catch((error) => console.error('[SSE] Failed to attach onOpen handler:', error));\n return () => {\n if (unsubscribe) {\n unsubscribe();\n }\n };\n },\n onError(callback: (event: Event) => void): () => void {\n let unsubscribe: (() => void) | null = null;\n ensureDelegate()\n .then((d) => {\n unsubscribe = d.onError(callback);\n })\n .catch((error) => console.error('[SSE] Failed to attach onError handler:', error));\n return () => {\n if (unsubscribe) {\n unsubscribe();\n }\n };\n },\n onMessage(callback: (data: unknown) => void): () => void {\n let unsubscribe: (() => void) | null = null;\n ensureDelegate()\n .then((d) => {\n unsubscribe = d.onMessage(callback);\n })\n .catch((error) => console.error('[SSE] Failed to attach onMessage handler:', error));\n return () => {\n if (unsubscribe) {\n unsubscribe();\n }\n };\n },\n subscribe(event: string, callback: (data: unknown) => void): () => void {\n let unsubscribe: (() => void) | null = null;\n ensureDelegate()\n .then((d) => {\n unsubscribe = d.subscribe(event, callback);\n })\n .catch((error) => console.error(`[SSE] Failed to subscribe to event \"${event}\":`, error));\n return () => {\n if (unsubscribe) {\n unsubscribe();\n }\n };\n },\n };\n}\n","import type { HttpDelegate, WebSocketDelegate } from '../types';\n\n/**\n * Context for request interception, allows modifying request properties\n */\nexport interface RequestInterceptorContext {\n method: string;\n url: string;\n headers?: Record<string, string>;\n body?: unknown;\n}\n\n/**\n * Context for response interception\n */\nexport interface ResponseInterceptorContext<T = unknown> {\n method: string;\n url: string;\n response: T;\n}\n\n/**\n * Interceptor for HTTP delegate methods\n */\nexport interface HttpInterceptor {\n before?: (context: RequestInterceptorContext) => undefined | Partial<RequestInterceptorContext> | Promise<Partial<RequestInterceptorContext> | undefined>;\n after?: <T>(context: ResponseInterceptorContext<T>) => undefined | Partial<T> | Promise<Partial<T> | undefined>;\n error?: (method: string, url: string, error: Error, body?: unknown) => void | Promise<void>;\n}\n\n/**\n * Interceptor for WebSocket delegate methods\n */\nexport interface WebSocketInterceptor {\n beforeConnect?: () => void | Promise<void>;\n afterConnect?: () => void | Promise<void>;\n beforeSend?: (message: unknown) => void | Promise<void>;\n afterSend?: (message: unknown) => void | Promise<void>;\n beforeClose?: () => void | Promise<void>;\n afterClose?: () => void | Promise<void>;\n onError?: (error: Error) => void | Promise<void>;\n}\n\n/**\n * Wraps an HTTP delegate with interceptors for all methods\n */\nexport function wrapHttpDelegate(delegate: HttpDelegate, interceptor: HttpInterceptor): HttpDelegate {\n const wrapMethod = (methodName: 'get' | 'post' | 'patch' | 'put' | 'delete') => {\n const originalMethod = delegate[methodName];\n\n return async <T>(url: string, bodyOrOptions?: unknown, optionsArg?: unknown): Promise<T> => {\n // Handle overloaded signatures: (url) or (url, body) or (url, options) or (url, body, options)\n const isGetOrDelete = methodName === 'get' || methodName === 'delete';\n const body = isGetOrDelete ? undefined : bodyOrOptions;\n const options = isGetOrDelete ? (bodyOrOptions as { headers?: Record<string, string> }) : (optionsArg as { headers?: Record<string, string> });\n\n let context: RequestInterceptorContext = { method: methodName, url, headers: options?.headers ?? {}, body };\n try {\n if (interceptor.before) {\n const beforeResult = await interceptor.before(context);\n if (beforeResult && typeof beforeResult === 'object') {\n context = { ...context, ...beforeResult };\n }\n }\n\n const finalOptions = context.headers ? { headers: context.headers } : undefined;\n let response = isGetOrDelete\n ? await (originalMethod as (url: string, options?: { headers?: Record<string, string> }) => Promise<T>)(context.url, finalOptions)\n : await (originalMethod as (url: string, body: unknown, options?: { headers?: Record<string, string> }) => Promise<T>)(context.url, context.body, finalOptions);\n\n // After interceptor\n if (interceptor.after) {\n const afterResult = await interceptor.after<T>({ method: methodName, url: context.url, response });\n if (afterResult && typeof afterResult === 'object') {\n response = { ...response, ...afterResult };\n }\n }\n\n return response;\n } catch (error) {\n if (interceptor.error) {\n await interceptor.error(methodName, context.url, error as Error, context.body);\n }\n\n throw error;\n }\n };\n };\n\n return {\n get: wrapMethod('get') as <T>(url: string, options?: { headers?: Record<string, string> }) => Promise<T>,\n post: wrapMethod('post') as <T>(url: string, body: unknown, options?: { headers?: Record<string, string> }) => Promise<T>,\n patch: wrapMethod('patch') as <T>(url: string, body: unknown, options?: { headers?: Record<string, string> }) => Promise<T>,\n put: wrapMethod('put') as <T>(url: string, body: unknown, options?: { headers?: Record<string, string> }) => Promise<T>,\n delete: wrapMethod('delete') as <T>(url: string, options?: { headers?: Record<string, string> }) => Promise<T>,\n };\n}\n\n/**\n * Wraps a WebSocket delegate with interceptors for connect, send, and close\n */\nexport function wrapWebSocketDelegate(delegate: WebSocketDelegate, interceptor: WebSocketInterceptor): WebSocketDelegate {\n return {\n ...delegate,\n connect: () => {\n if (interceptor.beforeConnect) {\n Promise.resolve(interceptor.beforeConnect()).catch(console.error);\n }\n\n delegate.connect();\n\n if (interceptor.afterConnect) {\n Promise.resolve(interceptor.afterConnect()).catch(console.error);\n }\n },\n\n send: (message: unknown) => {\n if (interceptor.beforeSend) {\n Promise.resolve(interceptor.beforeSend(message)).catch(console.error);\n }\n\n delegate.send(message);\n\n if (interceptor.afterSend) {\n Promise.resolve(interceptor.afterSend(message)).catch(console.error);\n }\n },\n\n close: () => {\n if (interceptor.beforeClose) {\n Promise.resolve(interceptor.beforeClose()).catch(console.error);\n }\n\n delegate.close();\n\n if (interceptor.afterClose) {\n Promise.resolve(interceptor.afterClose()).catch(console.error);\n }\n },\n };\n}\n","import type { DelegateFeature, Feature, HttpDelegate, ServerSentEventDelegate, WebSocketDelegate } from '../../../types';\nimport { createDelegate, type DelegateOptions, type HttpDelegateOptions } from '../../../utils';\nimport type { CreateAxiosDelegateOptions, CreateBetterFetchDelegateOptions, CreateFetchDelegateOptions } from '../../../utils/delegate/http/types';\nimport type { CreateServerSentEventDelegateOptions } from '../../../utils/delegate/server-sent-event-delegate.utils';\nimport type { CreateWebSocketDelegateOptions } from '../../../utils/delegate/websocket-delegate.utils';\n\ntype DelegateFromOptions<O extends DelegateOptions> = O['type'] extends 'http' ? HttpDelegate : O['type'] extends 'websocket' ? WebSocketDelegate : O['type'] extends 'server-sent-event' ? ServerSentEventDelegate : never;\n\nfunction createDelegateFeature(options: DelegateOptions & { name?: string }, ...features: DelegateFeature[]): unknown {\n return (input: Record<string, unknown>) => {\n const { delegate, ...rest } = features.reduce(\n (acc, feature) => {\n const result = feature(acc);\n return Object.assign({}, acc, result);\n },\n { ...input, delegate: createDelegate(options) },\n );\n\n const delegateName = options.name ?? 'delegate';\n\n return {\n [delegateName]: delegate,\n ...rest,\n };\n };\n}\n\n/**\n * Add a delegate to the client.\n *\n * @param options - The options for the delegate.\n * @param features - The features to apply to the delegate.\n * @returns A feature that returns the delegate.\n */\nexport function withDelegate<const Options extends DelegateOptions & { name: string }>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { [key in Options['name']]: DelegateFromOptions<Options> }>;\nexport function withDelegate<const Options extends DelegateOptions>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { delegate: DelegateFromOptions<Options> }>;\nexport function withDelegate(options: DelegateOptions & { name?: string }, ...features: DelegateFeature[]): unknown {\n return createDelegateFeature(options, ...features);\n}\n\ntype WithNameOption = { name?: string };\ntype HttpDelegateShortcutOptions = Omit<HttpDelegateOptions, 'type'> & { impl: 'fetch' | 'axios' | 'better-fetch' } & WithNameOption;\ntype FetchDelegateShortcutOptions = Omit<CreateFetchDelegateOptions, 'type' | 'impl'> & WithNameOption;\ntype AxiosDelegateShortcutOptions = Omit<CreateAxiosDelegateOptions, 'type' | 'impl'> & WithNameOption;\ntype BetterFetchDelegateShortcutOptions = Omit<CreateBetterFetchDelegateOptions, 'type' | 'impl'> & WithNameOption;\ntype SseDelegateShortcutOptions = CreateServerSentEventDelegateOptions & WithNameOption;\ntype WebSocketDelegateShortcutOptions = CreateWebSocketDelegateOptions & WithNameOption;\n\nexport function withHttpDelegate<const Options extends HttpDelegateShortcutOptions & { name: string }>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { [key in Options['name']]: HttpDelegate }>;\nexport function withHttpDelegate(options: HttpDelegateShortcutOptions, ...features: DelegateFeature[]): Feature<unknown, { delegate: HttpDelegate }>;\nexport function withHttpDelegate(options: HttpDelegateShortcutOptions, ...features: DelegateFeature[]): unknown {\n return createDelegateFeature({ ...options, type: 'http' } as HttpDelegateOptions & WithNameOption, ...features);\n}\n\nexport function withFetchDelegate<const Options extends FetchDelegateShortcutOptions & { name: string }>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { [key in Options['name']]: HttpDelegate }>;\nexport function withFetchDelegate(options: FetchDelegateShortcutOptions, ...features: DelegateFeature[]): Feature<unknown, { delegate: HttpDelegate }>;\nexport function withFetchDelegate(options: FetchDelegateShortcutOptions, ...features: DelegateFeature[]): unknown {\n return createDelegateFeature({ ...options, type: 'http' }, ...features);\n}\n\nexport function withAxiosDelegate<const Options extends AxiosDelegateShortcutOptions & { name: string }>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { [key in Options['name']]: HttpDelegate }>;\nexport function withAxiosDelegate(options: AxiosDelegateShortcutOptions, ...features: DelegateFeature[]): Feature<unknown, { delegate: HttpDelegate }>;\nexport function withAxiosDelegate(options: AxiosDelegateShortcutOptions, ...features: DelegateFeature[]): unknown {\n return createDelegateFeature({ ...options, type: 'http', impl: 'axios' } as CreateAxiosDelegateOptions & WithNameOption, ...features);\n}\n\nexport function withBetterFetchDelegate<const Options extends BetterFetchDelegateShortcutOptions & { name: string }>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { [key in Options['name']]: HttpDelegate }>;\nexport function withBetterFetchDelegate(options: BetterFetchDelegateShortcutOptions, ...features: DelegateFeature[]): Feature<unknown, { delegate: HttpDelegate }>;\nexport function withBetterFetchDelegate(options: BetterFetchDelegateShortcutOptions, ...features: DelegateFeature[]): unknown {\n return createDelegateFeature({ ...options, type: 'http', impl: 'better-fetch' } as CreateBetterFetchDelegateOptions & WithNameOption, ...features);\n}\n\nexport function withSseDelegate<const Options extends SseDelegateShortcutOptions & { name: string }>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { [key in Options['name']]: ServerSentEventDelegate }>;\nexport function withSseDelegate(options: SseDelegateShortcutOptions, ...features: DelegateFeature[]): Feature<unknown, { delegate: ServerSentEventDelegate }>;\nexport function withSseDelegate(options: SseDelegateShortcutOptions, ...features: DelegateFeature[]): unknown {\n return createDelegateFeature({ ...options, type: 'server-sent-event' }, ...features);\n}\n\nexport function withWebSocketDelegate<const Options extends WebSocketDelegateShortcutOptions & { name: string }>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { [key in Options['name']]: WebSocketDelegate }>;\nexport function withWebSocketDelegate(options: WebSocketDelegateShortcutOptions, ...features: DelegateFeature[]): Feature<unknown, { delegate: WebSocketDelegate }>;\nexport function withWebSocketDelegate(options: WebSocketDelegateShortcutOptions, ...features: DelegateFeature[]): unknown {\n return createDelegateFeature({ ...options, type: 'websocket' }, ...features);\n}\n","import type { Feature } from '../../../types';\n\ninterface Hooks<Input> {\n onInit?: (input: Input) => void;\n}\n\n/**\n * Add hooks to the client.\n *\n * @param hooks - The hooks to be used in the feature.\n * @returns A feature that returns the hooks.\n */\nexport function withHooks<H extends Hooks<Input>, Input>(hooks: H): Feature<Input, Input> {\n return () => ({ ...hooks }) as unknown as Input;\n}\n","import type { Feature } from '../../../types';\n\n/**\n * Add methods to the client.\n *\n * @param methodCreator - The method creator to be used in the feature.\n * @returns A feature that returns the methods.\n */\nexport function withMethods<Methods, Input>(methodCreator: (input: Input) => Methods): Feature<Input, Methods & Input> {\n return (input) => ({ ...methodCreator(input), ...input });\n}\n","import type { Feature, HttpDelegate, WebSocketDelegate } from '../../../types';\nimport { isHttpDelegate, isWebSocketDelegate, wrapHttpDelegate, wrapWebSocketDelegate } from '../../../utils';\n\ntype Environments = Record<string, string>;\n\ninterface EnvironmentsConfig<Input, Environment extends Environments = Environments> {\n name: keyof Input;\n environments: Environment;\n default?: keyof Environment;\n fallback?: keyof Environment;\n}\n\ninterface EnvironmentManager<Environment extends Environments> {\n getCurrentEnvironment(): keyof Environment;\n setEnvironment(env: keyof Environment): void;\n getBaseURL(): string;\n}\n\nfunction createEnvironmentManager<Input, Environment extends Environments>(config: EnvironmentsConfig<Input, Environment>): EnvironmentManager<Environment> {\n const environmentKeys = Object.keys(config.environments);\n const defaultKey = config.default || environmentKeys[0];\n let currentEnv = defaultKey;\n\n function getCurrentEnvironment(): keyof Environment {\n return currentEnv;\n }\n\n function setEnvironment(env: string): void {\n if (!config.environments[env]) {\n const fallback = config.fallback || defaultKey;\n console.warn(`[ENVIRONMENTS] Environment \"${env}\" not found, falling back to \"${String(fallback)}\"`);\n currentEnv = fallback;\n } else {\n currentEnv = env;\n console.info(`[ENVIRONMENTS] Switched to environment: ${env} (${config.environments[env]})`);\n }\n }\n\n function getBaseURL() {\n return config.environments[currentEnv] || config.environments[Object.keys(config.environments)[0]];\n }\n\n return {\n getCurrentEnvironment,\n setEnvironment,\n getBaseURL,\n };\n}\n\nfunction wrapHttpDelegateWithEnvironments<Environment extends Environments>(delegate: HttpDelegate, envManager: EnvironmentManager<Environment>): HttpDelegate {\n const buildFullURL = (url: string) => {\n const baseURL = envManager.getBaseURL();\n if (url.startsWith('http')) {\n return url;\n }\n\n const cleanBaseURL = baseURL.replace(/\\/$/, '');\n const cleanPath = url.startsWith('/') ? url : `/${url}`;\n const fullURL = `${cleanBaseURL}${cleanPath}`;\n console.info(`[ENVIRONMENTS] Building URL: ${cleanBaseURL} + ${cleanPath} = ${fullURL}`);\n return fullURL;\n };\n\n return wrapHttpDelegate(delegate, {\n before: (context) => {\n return { url: buildFullURL(context.url) };\n },\n });\n}\n\nfunction wrapWebSocketDelegateWithEnvironments<Environment extends Environments>(delegate: WebSocketDelegate, envManager: EnvironmentManager<Environment>): WebSocketDelegate {\n return wrapWebSocketDelegate(delegate, {\n beforeConnect: () => {\n console.info(`[ENVIRONMENTS] WebSocket connecting to: ${envManager.getBaseURL()}`);\n },\n });\n}\n\nfunction wrapDelegateWithEnvironments<Environment extends Environments>(delegate: unknown, envManager: EnvironmentManager<Environment>): unknown {\n if (isHttpDelegate(delegate)) {\n return wrapHttpDelegateWithEnvironments(delegate, envManager);\n }\n\n if (isWebSocketDelegate(delegate)) {\n return wrapWebSocketDelegateWithEnvironments(delegate, envManager);\n }\n\n return delegate;\n}\n\nexport function withEnvironments<Input, Environment extends Environments>(config: EnvironmentsConfig<Input, Environment>): Feature<Input, Input & { environments: EnvironmentManager<Environment> }> {\n return (input: Input) => {\n const { name } = config;\n const environments = createEnvironmentManager(config);\n\n return {\n ...input,\n [name]: wrapDelegateWithEnvironments(input[name], environments),\n environments,\n };\n };\n}\n","import type { DelegateFeature } from '../../../types';\nimport { isHttpDelegate, wrapHttpDelegate } from '../../../utils';\nimport type { HttpInterceptor } from '../../../utils/delegate-middleware.utils';\n\nexport interface InterceptorConfig extends HttpInterceptor {\n name?: string;\n}\n\n/**\n * Add HTTP interceptor to the delegate.\n *\n * @param config - The interceptor configuration.\n * @returns A delegate feature that wraps the HTTP delegate with the interceptor.\n */\nexport function withInterceptor(config: InterceptorConfig): DelegateFeature {\n return ({ delegate, ...rest }) => {\n const { name: _name, ...interceptor } = config;\n\n if (isHttpDelegate(delegate)) {\n return {\n ...rest,\n delegate: wrapHttpDelegate(delegate, interceptor),\n };\n }\n\n return { ...rest, delegate };\n };\n}\n","import type { Delegate, DelegateFeature, HttpDelegate } from '../../../types';\nimport { isHttpDelegate } from '../../../utils';\n\ninterface OfflineConfig {\n /**\n * The strategy to use for the offline manager.\n * @default 'cache-first'\n */\n strategy?: 'cache-first' | 'network-first' | 'network-only';\n /**\n * The TTL for the cache in milliseconds.\n * @default 300000 (5 minutes)\n */\n cacheTTL?: number;\n}\n\ninterface CacheEntry<T = unknown> {\n data: T;\n timestamp: number;\n ttl: number;\n}\n\ninterface OfflineManager {\n isOnline(): boolean;\n clearCache(): void;\n getCacheSize(): number;\n}\n\ninterface ExtendedOfflineManager extends OfflineManager {\n getFromCache: <T>(key: string) => T | null;\n setInCache: <T>(key: string, data: T) => void;\n generateCacheKey: (method: string, url: string, body?: unknown) => string;\n}\n\nfunction isOnline(): boolean {\n return typeof navigator !== 'undefined' && navigator.onLine !== undefined ? navigator.onLine : true;\n}\n\nfunction createOfflineManager(config: OfflineConfig): ExtendedOfflineManager {\n const cache = new Map<string, CacheEntry>();\n const cacheTTL = config.cacheTTL ?? 300000;\n\n function generateCacheKey(method: string, url: string, body?: unknown): string {\n const bodyStr = body ? JSON.stringify(body) : '';\n return `${method}:${url}:${bodyStr}`;\n }\n\n function getFromCache<T>(cacheKey: string): T | null {\n const entry = cache.get(cacheKey);\n if (!entry) {\n return null;\n }\n\n if (Date.now() - entry.timestamp > entry.ttl) {\n cache.delete(cacheKey);\n return null;\n }\n\n return entry.data as T;\n }\n\n function setInCache<T>(cacheKey: string, data: T): void {\n cache.set(cacheKey, {\n data,\n timestamp: Date.now(),\n ttl: cacheTTL,\n });\n }\n\n return {\n isOnline,\n clearCache: () => cache.clear(),\n getCacheSize: () => cache.size,\n getFromCache: getFromCache,\n setInCache: setInCache,\n generateCacheKey: generateCacheKey,\n };\n}\n\nfunction wrapHttpDelegateWithOffline(delegate: HttpDelegate, offlineManager: ExtendedOfflineManager, config: OfflineConfig): HttpDelegate {\n const strategy = config.strategy ?? 'cache-first';\n\n const wrapMethod = <K extends keyof HttpDelegate>(methodName: K) => {\n const originalMethod = delegate[methodName];\n\n return async <T>(url: string, bodyOrOptions?: unknown, optionsArg?: unknown): Promise<T> => {\n // Handle overloaded signatures\n const isGetOrDelete = methodName === 'get' || methodName === 'delete';\n const body = isGetOrDelete ? undefined : bodyOrOptions;\n const options = isGetOrDelete ? bodyOrOptions : optionsArg;\n\n const cacheKey = offlineManager.generateCacheKey(String(methodName), url, body);\n\n if (strategy === 'cache-first') {\n const cached = offlineManager.getFromCache<T>(cacheKey);\n if (cached) {\n console.info(`[OFFLINE] Cache hit for ${methodName} ${url}`);\n return cached;\n }\n\n if (offlineManager.isOnline()) {\n try {\n const result = isGetOrDelete ? await (originalMethod as (url: string, options?: unknown) => Promise<T>)(url, options) : await (originalMethod as (url: string, body: unknown, options?: unknown) => Promise<T>)(url, body, options);\n offlineManager.setInCache(cacheKey, result);\n return result;\n } catch (error) {\n console.error(`[OFFLINE] Network error for ${methodName} ${url}:`, error);\n throw error;\n }\n }\n\n throw new Error(`[OFFLINE] No cache available and offline for ${methodName} ${url}`);\n }\n\n if (strategy === 'network-first') {\n if (offlineManager.isOnline()) {\n try {\n const result = isGetOrDelete ? await (originalMethod as (url: string, options?: unknown) => Promise<T>)(url, options) : await (originalMethod as (url: string, body: unknown, options?: unknown) => Promise<T>)(url, body, options);\n offlineManager.setInCache(cacheKey, result);\n return result;\n } catch (error) {\n const cached = offlineManager.getFromCache<T>(cacheKey);\n if (cached) {\n console.warn(`[OFFLINE] Network failed, using cache for ${methodName} ${url}`);\n return cached;\n }\n throw error;\n }\n }\n\n const cached = offlineManager.getFromCache<T>(cacheKey);\n if (cached) {\n return cached;\n }\n throw new Error(`[OFFLINE] Offline and no cache for ${methodName} ${url}`);\n }\n\n if (strategy === 'network-only') {\n if (!offlineManager.isOnline()) {\n throw new Error(`[OFFLINE] Network unavailable for ${methodName} ${url}`);\n }\n return isGetOrDelete ? await (originalMethod as (url: string, options?: unknown) => Promise<T>)(url, options) : await (originalMethod as (url: string, body: unknown, options?: unknown) => Promise<T>)(url, body, options);\n }\n\n throw new Error(`[OFFLINE] Unknown strategy: ${strategy}`);\n };\n };\n\n return {\n get: wrapMethod('get'),\n post: wrapMethod('post'),\n patch: wrapMethod('patch'),\n put: wrapMethod('put'),\n delete: wrapMethod('delete'),\n };\n}\n\nfunction wrapDelegateWithOffline(delegate: Delegate, offlineManager: ExtendedOfflineManager, config: OfflineConfig): Delegate {\n if (isHttpDelegate(delegate)) {\n return wrapHttpDelegateWithOffline(delegate, offlineManager, config);\n }\n\n return delegate;\n}\n\nexport function withOffline(config: OfflineConfig = {}): DelegateFeature<{ offline: OfflineManager }> {\n return ({ delegate, ...rest }) => {\n const offlineManager = createOfflineManager(config);\n\n return {\n ...rest,\n delegate: wrapDelegateWithOffline(delegate, offlineManager, config),\n offline: offlineManager,\n };\n };\n}\n","import type { Delegate, DelegateFeature, WebSocketDelegate } from '../../../types';\nimport { type HttpInterceptor, isHttpDelegate, isWebSocketDelegate, type ResponseInterceptorContext, wrapHttpDelegate } from '../../../utils';\n\ninterface TelemetryEvent {\n timestamp: number;\n type: 'request' | 'response' | 'error';\n operation: string;\n duration?: number;\n status?: number;\n error?: Error;\n traceId?: string;\n}\n\ninterface TelemetryMetrics {\n requests: { total: number; success: number; errors: number };\n latency: { avg: number; min: number; max: number };\n}\n\ninterface TelemetryCollector {\n recordEvent: (event: TelemetryEvent) => void;\n generateTraceId: () => string | undefined;\n getMetrics: () => TelemetryMetrics;\n}\n\ninterface TelemetryOptions {\n enableMetrics?: boolean;\n enableTracing?: boolean;\n enableLogging?: boolean;\n onEvent?: (event: TelemetryEvent) => void;\n onMetrics?: (metrics: TelemetryMetrics) => void;\n}\n\nfunction createTelemetryCollector({ enableMetrics = false, enableTracing = false, enableLogging = false, onEvent = () => {}, onMetrics = () => {} }: TelemetryOptions): TelemetryCollector {\n const events: TelemetryEvent[] = [];\n const metrics: TelemetryMetrics = {\n requests: { total: 0, success: 0, errors: 0 },\n latency: { avg: 0, min: Number.MAX_SAFE_INTEGER, max: Number.MIN_SAFE_INTEGER },\n };\n\n function recordEvent(event: TelemetryEvent): void {\n events.push(event);\n updateMetrics(event);\n\n if (enableLogging) {\n logEvent(event);\n }\n\n onEvent(event);\n }\n\n function generateTraceId(): string | undefined {\n return enableTracing ? Math.random().toString(36).substring(2, 15) : undefined;\n }\n\n function getMetrics(): TelemetryMetrics {\n return {\n requests: enableMetrics ? metrics.requests : { total: 0, success: 0, errors: 0 },\n latency: enableMetrics ? metrics.latency : { avg: 0, min: 0, max: 0 },\n };\n }\n\n function updateMetrics(event: TelemetryEvent): void {\n if (!enableMetrics) {\n return;\n }\n\n switch (event.type) {\n case 'request':\n metrics.requests.total++;\n break;\n\n case 'response':\n metrics.requests.success++;\n if (event.duration) {\n updateLatency(event.duration);\n }\n break;\n\n case 'error':\n metrics.requests.errors++;\n if (event.duration) {\n updateLatency(event.duration);\n }\n break;\n }\n\n onMetrics(metrics);\n }\n\n function updateLatency(_duration: number): void {\n const latencies = events\n .filter((event): event is TelemetryEvent & { duration: number } => event.duration !== undefined)\n .map((event) => event.duration)\n .filter((d) => d > 0);\n\n if (latencies.length > 0) {\n metrics.latency.avg = latencies.reduce((sum, lat) => sum + lat, 0) / latencies.length;\n metrics.latency.min = Math.min(...latencies);\n metrics.latency.max = Math.max(...latencies);\n }\n }\n\n function logEvent(event: TelemetryEvent): void {\n const logLevel = event.type === 'error' ? 'error' : 'info';\n const message = `[TELEMETRY] ${event.operation} ${event.duration ? `(${event.duration}ms)` : ''}`;\n\n if (event.type === 'error' && event.error) {\n console[logLevel](message, event.error);\n } else {\n console[logLevel](message);\n }\n }\n\n return {\n recordEvent,\n generateTraceId,\n getMetrics,\n };\n}\n\nfunction createTelemetryHttpInterceptor(collector: TelemetryCollector): HttpInterceptor {\n const startTimes = new Map<string, { time: number; traceId: string | undefined }>();\n\n return {\n before: (context: { method: string; url: string }) => {\n const traceId = collector.generateTraceId();\n const operation = `${context.method.toUpperCase()} ${context.url}`;\n const startTime = Date.now();\n\n startTimes.set(operation, { time: startTime, traceId });\n\n collector.recordEvent({\n timestamp: startTime,\n type: 'request',\n operation,\n traceId,\n });\n\n return undefined;\n },\n after: <T>(context: ResponseInterceptorContext<T>) => {\n const operation = `${context.method.toUpperCase()} ${context.url}`;\n const startData = startTimes.get(operation);\n\n if (startData) {\n const duration = Date.now() - startData.time;\n\n collector.recordEvent({\n timestamp: Date.now(),\n type: 'response',\n operation,\n duration,\n status: 200,\n traceId: startData.traceId,\n });\n\n startTimes.delete(operation);\n }\n\n return context.response;\n },\n error: (method: string, url: string, error: Error) => {\n const operation = `${method.toUpperCase()} ${url}`;\n const startData = startTimes.get(operation);\n\n if (startData) {\n const duration = Date.now() - startData.time;\n\n collector.recordEvent({\n timestamp: Date.now(),\n type: 'error',\n operation,\n duration,\n error,\n traceId: startData.traceId,\n });\n\n startTimes.delete(operation);\n }\n },\n } as HttpInterceptor;\n}\n\nfunction wrapWebSocketDelegateWithTelemetry(delegate: WebSocketDelegate, collector: TelemetryCollector): WebSocketDelegate {\n const createTimedOperation = (operation: string) => {\n const traceId = collector.generateTraceId();\n const startTime = Date.now();\n\n collector.recordEvent({\n timestamp: startTime,\n type: 'request',\n operation,\n traceId,\n });\n\n return {\n success: () => {\n const duration = Date.now() - startTime;\n collector.recordEvent({\n timestamp: Date.now(),\n type: 'response',\n operation,\n duration,\n status: 200,\n traceId,\n });\n },\n error: (error: Error) => {\n const duration = Date.now() - startTime;\n collector.recordEvent({\n timestamp: Date.now(),\n type: 'error',\n operation,\n duration,\n error,\n traceId,\n });\n },\n };\n };\n\n return {\n ...delegate,\n connect: () => {\n const op = createTimedOperation('connect');\n try {\n delegate.connect();\n op.success();\n } catch (error) {\n op.error(error as Error);\n throw error;\n }\n },\n send: (message: unknown) => {\n const op = createTimedOperation('send');\n try {\n delegate.send(message);\n op.success();\n } catch (error) {\n op.error(error as Error);\n throw error;\n }\n },\n close: () => {\n const op = createTimedOperation('close');\n try {\n delegate.close();\n op.success();\n } catch (error) {\n op.error(error as Error);\n throw error;\n }\n },\n onMessage: (callback: (data: unknown) => void) => {\n const op = createTimedOperation('onMessage');\n try {\n const result = delegate.onMessage(callback);\n op.success();\n return result;\n } catch (error) {\n op.error(error as Error);\n throw error;\n }\n },\n onError: (callback: (event: Event) => void) => {\n return delegate.onError((event: Event) => {\n const op = createTimedOperation('onError');\n op.error(new Error('WebSocket error'));\n callback(event);\n });\n },\n };\n}\n\nfunction wrapDelegateWithTelemetry(delegate: Delegate, collector: TelemetryCollector): Delegate {\n if (isHttpDelegate(delegate)) {\n return wrapHttpDelegate(delegate, createTelemetryHttpInterceptor(collector));\n }\n\n if (isWebSocketDelegate(delegate)) {\n return wrapWebSocketDelegateWithTelemetry(delegate, collector);\n }\n\n return delegate;\n}\n\nexport function withTelemetry(options: TelemetryOptions = {}): DelegateFeature<{ telemetry: TelemetryCollector }> {\n return ({ delegate, ...rest }) => {\n const telemetryCollector = createTelemetryCollector(options);\n\n return {\n ...rest,\n delegate: wrapDelegateWithTelemetry(delegate, telemetryCollector),\n telemetry: telemetryCollector,\n };\n };\n}\n","import type { Feature } from './types';\n\ntype Merge<A, B> = Omit<A, keyof B> & B;\n\n/**\n * Creates a universal client that combines multiple features.\n *\n * @param features - The features to be used in the client.\n * @returns A universal client that combines multiple features.\n */\nexport function universalClient<A>(featureA: Feature<unknown, A>): A;\nexport function universalClient<A, B>(featureA: Feature<unknown, A>, featureB: Feature<A, B>): Merge<A, B>;\nexport function universalClient<A, B, C>(featureA: Feature<unknown, A>, featureB: Feature<A, B>, featureC: Feature<Merge<A, B>, C>): Merge<Merge<A, B>, C>;\nexport function universalClient<A, B, C, D>(featureA: Feature<unknown, A>, featureB: Feature<A, B>, featureC: Feature<Merge<A, B>, C>, featureD: Feature<Merge<Merge<A, B>, C>, D>): Merge<Merge<Merge<A, B>, C>, D>;\nexport function universalClient<A, B, C, D, E>(\n featureA: Feature<unknown, A>,\n featureB: Feature<A, B>,\n featureC: Feature<Merge<A, B>, C>,\n featureD: Feature<Merge<Merge<A, B>, C>, D>,\n featureE: Feature<Merge<Merge<Merge<A, B>, C>, D>, E>,\n): Merge<Merge<Merge<Merge<A, B>, C>, D>, E>;\nexport function universalClient<A, B, C, D, E, F>(\n featureA: Feature<unknown, A>,\n featureB: Feature<A, B>,\n featureC: Feature<Merge<A, B>, C>,\n featureD: Feature<Merge<Merge<A, B>, C>, D>,\n featureE: Feature<Merge<Merge<Merge<A, B>, C>, D>, E>,\n featureF: Feature<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>,\n): Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>;\nexport function universalClient<A, B, C, D, E, F, G>(\n featureA: Feature<unknown, A>,\n featureB: Feature<A, B>,\n featureC: Feature<Merge<A, B>, C>,\n featureD: Feature<Merge<Merge<A, B>, C>, D>,\n featureE: Feature<Merge<Merge<Merge<A, B>, C>, D>, E>,\n featureF: Feature<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>,\n featureG: Feature<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>,\n): Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>;\nexport function universalClient<A, B, C, D, E, F, G, H>(\n featureA: Feature<unknown, A>,\n featureB: Feature<A, B>,\n featureC: Feature<Merge<A, B>, C>,\n featureD: Feature<Merge<Merge<A, B>, C>, D>,\n featureE: Feature<Merge<Merge<Merge<A, B>, C>, D>, E>,\n featureF: Feature<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>,\n featureG: Feature<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>,\n featureH: Feature<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>,\n): Merge<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>;\nexport function universalClient<A, B, C, D, E, F, G, H, I>(\n featureA: Feature<unknown, A>,\n featureB: Feature<A, B>,\n featureC: Feature<Merge<A, B>, C>,\n featureD: Feature<Merge<Merge<A, B>, C>, D>,\n featureE: Feature<Merge<Merge<Merge<A, B>, C>, D>, E>,\n featureF: Feature<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>,\n featureG: Feature<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>,\n featureH: Feature<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>,\n featureI: Feature<Merge<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>, I>,\n): Merge<Merge<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>, I>;\nexport function universalClient<A, B, C, D, E, F, G, H, I, J>(\n featureA: Feature<unknown, A>,\n featureB: Feature<A, B>,\n featureC: Feature<Merge<A, B>, C>,\n featureD: Feature<Merge<Merge<A, B>, C>, D>,\n featureE: Feature<Merge<Merge<Merge<A, B>, C>, D>, E>,\n featureF: Feature<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>,\n featureG: Feature<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>,\n featureH: Feature<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>,\n featureI: Feature<Merge<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>, I>,\n featureJ: Feature<Merge<Merge<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>, I>, J>,\n): Merge<Merge<Merge<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>, I>, J>;\nexport function universalClient(...withFeatures: Feature<unknown, unknown>[]): unknown;\nexport function universalClient(...withFeatures: Feature<unknown, unknown>[]) {\n // biome-ignore lint/performance/noAccumulatingSpread: needed for typescript\n const client = withFeatures.reduce((accumulator, feature) => Object.assign(accumulator, feature(accumulator)), {});\n\n // Extract onInit hook if present\n const { onInit, ...rest } = client as Record<string, unknown>;\n\n // Call onInit hook if it exists\n if (typeof onInit === 'function') {\n onInit(rest);\n }\n\n return rest;\n}\n"]}
package/dist/index.mjs CHANGED
@@ -1,9 +1,9 @@
1
1
  /**
2
- * universal-client v0.0.11
2
+ * universal-client v0.0.12
3
3
  * (c) 2026 Kevin Bonnoron
4
4
  * @license MIT
5
5
  */
6
- var q=Object.defineProperty;var b=(t,e)=>()=>(t&&(e=t(t=0)),e);var x=(t,e)=>{for(var s in e)q(t,s,{get:e[s],enumerable:true});};var A={};x(A,{createAxiosDelegate:()=>U});async function U(t){let e;try{e=await new Function("moduleName","return import(moduleName)")("axios");}catch{e=null;}if(!e)throw new Error("Axios is not installed. Please install axios to use the axios delegate.");let s=e.default,{baseURL:n,...o}=t,r=s.create({baseURL:n,...o});return {get(a,u){return r.get(a,{headers:u?.headers}).then(l=>l.data)},post(a,u,l){return r.post(a,u,{headers:l?.headers}).then(m=>m.data)},patch(a,u,l){return r.patch(a,u,{headers:l?.headers}).then(m=>m.data)},put(a,u,l){return r.put(a,u,{headers:l?.headers}).then(m=>m.data)},delete(a,u){return r.delete(a,{headers:u?.headers}).then(l=>l.data)}}}var H=b(()=>{});var B={};x(B,{createBetterFetchDelegate:()=>j});async function j(t){let e;try{e=await new Function("moduleName","return import(moduleName)")("@better-fetch/fetch");}catch{e=null;}if(!e)throw new Error("@better-fetch/fetch is not installed. Please install @better-fetch/fetch to use the better-fetch delegate.");let{createFetch:s}=e,{baseURL:n,...o}=t,r=s({baseURL:n,...o});return {get(a,u){return r(a,{headers:u?.headers}).then(l=>l.data)},post(a,u,l){return r(a,{method:"POST",body:u,headers:l?.headers}).then(m=>m.data)},patch(a,u,l){return r(a,{method:"PATCH",body:u,headers:l?.headers}).then(m=>m.data)},put(a,u,l){return r(a,{method:"PUT",body:u,headers:l?.headers}).then(m=>m.data)},delete(a,u){return r(a,{method:"DELETE",headers:u?.headers}).then(l=>l.data)}}}var R=b(()=>{});function N(t){return async e=>{if(!e.ok){let s=`HTTP ${e.status}: ${e.statusText}`;try{let n=await e.clone().json();n.error?s=n.error:n.message&&(s=n.message);}catch{}throw new Error(s)}return t==="json"?e.json():t==="text"?e.text():e}}function G(t){let e=new URLSearchParams;for(let[s,n]of Object.entries(t??{}))if(n!=null)if(n instanceof Date)e.append(s,n.toISOString());else if(Array.isArray(n))for(let o of n)e.append(`${s}[]`,o?.toString()??"");else e.append(s,n.toString());return e.size?`?${e}`:""}function T({baseURL:t,format:e="json"}){function s(n,o,r,{params:a={},headers:u={}}={}){let l={method:n,headers:{...u}};return r&&(l.body=JSON.stringify(r)),fetch(`${t}${o}${G(a)}`,l).then(N(e))}return {get(n,{params:o={},headers:r={}}={}){return s("GET",n,void 0,{params:o,headers:r})},post(n,o,{params:r={},headers:a={}}={}){return s("POST",n,o,{params:r,headers:a})},patch(n,o,{params:r={},headers:a={}}={}){return s("PATCH",n,o,{params:r,headers:a})},put(n,o,{params:r={},headers:a={}}={}){return s("PUT",n,o,{params:r,headers:a})},delete(n,{params:o={},headers:r={}}={}){return s("DELETE",n,void 0,{params:o,headers:r})}}}async function I(t){if(t.impl==="axios"){let{createAxiosDelegate:e}=await Promise.resolve().then(()=>(H(),A));return e(t)}if(t.impl==="better-fetch"){let{createBetterFetchDelegate:e}=await Promise.resolve().then(()=>(R(),B));return e(t)}return T(t)}async function P({baseURL:t}){let e=new Set,s=new Set,n=new Set,o=new Map,r=null,a=null;function u(){r&&(r.close(),r=null),a&&(a.abort(),a=null);}function l(g,f){let d=f.join(`
6
+ var q=Object.defineProperty;var b=(t,e)=>()=>(t&&(e=t(t=0)),e);var x=(t,e)=>{for(var s in e)q(t,s,{get:e[s],enumerable:true});};var A={};x(A,{createAxiosDelegate:()=>U});async function U(t){let e;try{e=await new Function("moduleName","return import(moduleName)")("axios");}catch{e=null;}if(!e)throw new Error("Axios is not installed. Please install axios to use the axios delegate.");let s=e.default,{baseURL:n,...o}=t,r=s.create({baseURL:n,...o});return {get(a,u){return r.get(a,{headers:u?.headers}).then(l=>l.data)},post(a,u,l){return r.post(a,u,{headers:l?.headers}).then(m=>m.data)},patch(a,u,l){return r.patch(a,u,{headers:l?.headers}).then(m=>m.data)},put(a,u,l){return r.put(a,u,{headers:l?.headers}).then(m=>m.data)},delete(a,u){return r.delete(a,{headers:u?.headers}).then(l=>l.data)}}}var H=b(()=>{});var B={};x(B,{createBetterFetchDelegate:()=>j});async function j(t){let e;try{e=await new Function("moduleName","return import(moduleName)")("@better-fetch/fetch");}catch{e=null;}if(!e)throw new Error("@better-fetch/fetch is not installed. Please install @better-fetch/fetch to use the better-fetch delegate.");let{createFetch:s}=e,{baseURL:n,...o}=t,r=s({baseURL:n,...o});return {get(a,u){return r(a,{headers:u?.headers}).then(l=>l.data)},post(a,u,l){return r(a,{method:"POST",body:u,headers:l?.headers}).then(m=>m.data)},patch(a,u,l){return r(a,{method:"PATCH",body:u,headers:l?.headers}).then(m=>m.data)},put(a,u,l){return r(a,{method:"PUT",body:u,headers:l?.headers}).then(m=>m.data)},delete(a,u){return r(a,{method:"DELETE",headers:u?.headers}).then(l=>l.data)}}}var R=b(()=>{});function N(t){return async e=>{if(!e.ok){let s=`HTTP ${e.status}: ${e.statusText}`;try{let n=await e.clone().json();n.error?s=n.error:n.message&&(s=n.message);}catch{}throw new Error(s)}return t==="json"?e.json():t==="text"?e.text():e}}function G(t){let e=new URLSearchParams;for(let[s,n]of Object.entries(t??{}))if(n!=null)if(n instanceof Date)e.append(s,n.toISOString());else if(Array.isArray(n))for(let o of n)e.append(`${s}[]`,o?.toString()??"");else e.append(s,n.toString());return e.size?`?${e}`:""}function T({baseURL:t,format:e="json"}){function s(n,o,r,{params:a={},headers:u={}}={}){let l={method:n,headers:{...u}};return r!=null&&(r instanceof FormData||r instanceof Blob||r instanceof ArrayBuffer||r instanceof URLSearchParams||r instanceof ReadableStream||typeof r=="string"?l.body=r:(l.body=JSON.stringify(r),l.headers["Content-Type"]??="application/json")),fetch(`${t}${o}${G(a)}`,l).then(N(e))}return {get(n,{params:o={},headers:r={}}={}){return s("GET",n,void 0,{params:o,headers:r})},post(n,o,{params:r={},headers:a={}}={}){return s("POST",n,o,{params:r,headers:a})},patch(n,o,{params:r={},headers:a={}}={}){return s("PATCH",n,o,{params:r,headers:a})},put(n,o,{params:r={},headers:a={}}={}){return s("PUT",n,o,{params:r,headers:a})},delete(n,{params:o={},headers:r={}}={}){return s("DELETE",n,void 0,{params:o,headers:r})}}}async function I(t){if(t.impl==="axios"){let{createAxiosDelegate:e}=await Promise.resolve().then(()=>(H(),A));return e(t)}if(t.impl==="better-fetch"){let{createBetterFetchDelegate:e}=await Promise.resolve().then(()=>(R(),B));return e(t)}return T(t)}async function P({baseURL:t}){let e=new Set,s=new Set,n=new Set,o=new Map,r=null,a=null;function u(){r&&(r.close(),r=null),a&&(a.abort(),a=null);}function l(g,f){let d=f.join(`
7
7
  `);if(g===""||g==="message")for(let i of s)i(d);if(g!==""&&g!=="message"){let i=o.get(g);if(i)for(let c of i)c(d);}}async function m(g){let f=g.getReader(),d=new TextDecoder,i="",c="",p=[];try{for(;;){let{done:h,value:D}=await f.read();if(h){p.length>0&&l(c,p);break}i+=d.decode(D,{stream:!0});let M=i.split(`
8
8
  `);i=M.pop()??"";for(let S of M){let w=S.endsWith("\r")?S.slice(0,-1):S;if(w===""){p.length>0&&(l(c,p),c="",p=[]);continue}if(w.startsWith(":"))continue;let y=w.indexOf(":"),C,F;switch(y===-1?(C=w,F=""):(C=w.slice(0,y),F=w[y+1]===" "?w.slice(y+2):w.slice(y+1)),C){case "data":p.push(F);break;case "event":c=F;break}}}}catch(h){if(h instanceof DOMException&&h.name==="AbortError")return;let D=new Event("error");for(let M of n)M(D);}}return {open(g){u();let f=g?.url??t,d=g?.method??"GET";if(d==="GET"){if(typeof EventSource>"u")throw new Error("EventSource is not available. This delegate only works in browser environments.");r=new EventSource(f),r.addEventListener("open",i=>{for(let c of e)c(i);}),r.addEventListener("error",i=>{for(let c of n)c(i);}),r.addEventListener("message",i=>{for(let c of s)c(i.data);});for(let[i,c]of o)for(let p of c){let h=D=>p(D.data);r.addEventListener(i,h);}}else {a=new AbortController;let i={method:d,headers:{Accept:"text/event-stream","Content-Type":"application/json",...g?.headers},signal:a.signal};g?.body!==void 0&&(i.body=JSON.stringify(g.body)),fetch(f,i).then(c=>{if(!c.ok){let h=new Event("error");for(let D of n)D(h);return}if(!c.body){let h=new Event("error");for(let D of n)D(h);return}let p=new Event("open");for(let h of e)h(p);m(c.body);}).catch(c=>{if(c instanceof DOMException&&c.name==="AbortError")return;let p=new Event("error");for(let h of n)h(p);});}},close(){u();},onOpen(g){return e.add(g),()=>e.delete(g)},onError(g){return n.add(g),()=>n.delete(g)},onMessage(g){return s.add(g),()=>s.delete(g)},subscribe(g,f){let d=o.get(g);if(d||(d=new Set,o.set(g,d)),d.add(f),r){let i=c=>f(c.data);return r.addEventListener(g,i),()=>{d.delete(f),r&&r.removeEventListener(g,i);}}return ()=>{d.delete(f);}}}}function W({baseURL:t,protocols:e,reconnectInterval:s=5e3,maxReconnectAttempts:n=10}){let o=null,r=null,a=0,u=new Set,l=new Set,m=new Set,g=new Set;function f(){r!==null||a>=n||(a++,r=window.setTimeout(()=>{r=null,d.connect();},s));}let d={connect:()=>{o&&o.close(),o=new WebSocket(t,e),o.onopen=i=>{a=0;for(let c of u)c(i);},o.onclose=i=>{for(let c of m)c(i);f();},o.onerror=i=>{for(let c of g)c(i);},o.onmessage=i=>{let c;try{c=JSON.parse(i.data);}catch{c=i.data;}for(let p of l)p(c);};},close(){o&&(o.close(),o=null),r!==null&&(window.clearTimeout(r),r=null);},send(i){o&&o.readyState===WebSocket.OPEN?o.send(JSON.stringify(i)):console.warn("WebSocket is not connected. Message not sent.");},onOpen(i){return u.add(i),()=>u.delete(i)},onClose(i){return m.add(i),()=>m.delete(i)},onError(i){return g.add(i),()=>g.delete(i)},onMessage(i){return l.add(i),()=>l.delete(i)}};return d.connect(),d}function v(t){return typeof t=="object"&&t!==null&&"get"in t&&"post"in t&&"patch"in t&&"put"in t&&"delete"in t}function O(t){return typeof t=="object"&&t!==null&&"connect"in t&&"send"in t&&"close"in t}var J=t=>typeof t=="object"&&t!==null&&"type"in t;function L(t){if(J(t)){if(t.type==="http")return K(t);if(t.type==="websocket")return W(t);if(t.type==="server-sent-event")return _(t);throw new Error("Unsupported delegate type")}return t}function K(t){let e=null,s=()=>(e||(e=I(t)),e);return {async get(n,o){return (await s()).get(n,o)},async post(n,o,r){return (await s()).post(n,o,r)},async patch(n,o,r){return (await s()).patch(n,o,r)},async put(n,o,r){return (await s()).put(n,o,r)},async delete(n,o){return (await s()).delete(n,o)}}}function _(t){let e=null,s=()=>(e||(e=P(t)),e);return {open(n){s().then(o=>o.open(n)).catch(o=>console.error("[SSE] Failed to open connection:",o));},close(){e&&e.then(n=>n.close()).catch(console.error);},onOpen(n){let o=null;return s().then(r=>{o=r.onOpen(n);}).catch(r=>console.error("[SSE] Failed to attach onOpen handler:",r)),()=>{o&&o();}},onError(n){let o=null;return s().then(r=>{o=r.onError(n);}).catch(r=>console.error("[SSE] Failed to attach onError handler:",r)),()=>{o&&o();}},onMessage(n){let o=null;return s().then(r=>{o=r.onMessage(n);}).catch(r=>console.error("[SSE] Failed to attach onMessage handler:",r)),()=>{o&&o();}},subscribe(n,o){let r=null;return s().then(a=>{r=a.subscribe(n,o);}).catch(a=>console.error(`[SSE] Failed to subscribe to event "${n}":`,a)),()=>{r&&r();}}}}function k(t,e){let s=n=>{let o=t[n];return async(r,a,u)=>{let l=n==="get"||n==="delete",m=l?void 0:a,f={method:n,url:r,headers:(l?a:u)?.headers??{},body:m};try{if(e.before){let c=await e.before(f);c&&typeof c=="object"&&(f={...f,...c});}let d=f.headers?{headers:f.headers}:void 0,i=l?await o(f.url,d):await o(f.url,f.body,d);if(e.after){let c=await e.after({method:n,url:f.url,response:i});c&&typeof c=="object"&&(i={...i,...c});}return i}catch(d){throw e.error&&await e.error(n,f.url,d,f.body),d}}};return {get:s("get"),post:s("post"),patch:s("patch"),put:s("put"),delete:s("delete")}}function $(t,e){return {...t,connect:()=>{e.beforeConnect&&Promise.resolve(e.beforeConnect()).catch(console.error),t.connect(),e.afterConnect&&Promise.resolve(e.afterConnect()).catch(console.error);},send:s=>{e.beforeSend&&Promise.resolve(e.beforeSend(s)).catch(console.error),t.send(s),e.afterSend&&Promise.resolve(e.afterSend(s)).catch(console.error);},close:()=>{e.beforeClose&&Promise.resolve(e.beforeClose()).catch(console.error),t.close(),e.afterClose&&Promise.resolve(e.afterClose()).catch(console.error);}}}function E(t,...e){return s=>{let{delegate:n,...o}=e.reduce((a,u)=>{let l=u(a);return Object.assign({},a,l)},{...s,delegate:L(t)});return {[t.name??"delegate"]:n,...o}}}function Fe(t,...e){return E(t,...e)}function Oe(t,...e){return E({...t,type:"http"},...e)}function Se(t,...e){return E({...t,type:"http"},...e)}function Ce(t,...e){return E({...t,type:"http",impl:"axios"},...e)}function be(t,...e){return E({...t,type:"http",impl:"better-fetch"},...e)}function xe(t,...e){return E({...t,type:"server-sent-event"},...e)}function Te(t,...e){return E({...t,type:"websocket"},...e)}function He(t){return ()=>({...t})}function Re(t){return e=>({...t(e),...e})}function z(t){let e=Object.keys(t.environments),s=t.default||e[0],n=s;function o(){return n}function r(u){if(t.environments[u])n=u,console.info(`[ENVIRONMENTS] Switched to environment: ${u} (${t.environments[u]})`);else {let l=t.fallback||s;console.warn(`[ENVIRONMENTS] Environment "${u}" not found, falling back to "${String(l)}"`),n=l;}}function a(){return t.environments[n]||t.environments[Object.keys(t.environments)[0]]}return {getCurrentEnvironment:o,setEnvironment:r,getBaseURL:a}}function V(t,e){let s=n=>{let o=e.getBaseURL();if(n.startsWith("http"))return n;let r=o.replace(/\/$/,""),a=n.startsWith("/")?n:`/${n}`,u=`${r}${a}`;return console.info(`[ENVIRONMENTS] Building URL: ${r} + ${a} = ${u}`),u};return k(t,{before:n=>({url:s(n.url)})})}function X(t,e){return $(t,{beforeConnect:()=>{console.info(`[ENVIRONMENTS] WebSocket connecting to: ${e.getBaseURL()}`);}})}function Y(t,e){return v(t)?V(t,e):O(t)?X(t,e):t}function We(t){return e=>{let{name:s}=t,n=z(t);return {...e,[s]:Y(e[s],n),environments:n}}}function qe(t){return ({delegate:e,...s})=>{let{name:n,...o}=t;return v(e)?{...s,delegate:k(e,o)}:{...s,delegate:e}}}function Q(){return typeof navigator<"u"&&navigator.onLine!==void 0?navigator.onLine:true}function Z(t){let e=new Map,s=t.cacheTTL??3e5;function n(a,u,l){let m=l?JSON.stringify(l):"";return `${a}:${u}:${m}`}function o(a){let u=e.get(a);return u?Date.now()-u.timestamp>u.ttl?(e.delete(a),null):u.data:null}function r(a,u){e.set(a,{data:u,timestamp:Date.now(),ttl:s});}return {isOnline:Q,clearCache:()=>e.clear(),getCacheSize:()=>e.size,getFromCache:o,setInCache:r,generateCacheKey:n}}function ee(t,e,s){let n=s.strategy??"cache-first",o=r=>{let a=t[r];return async(u,l,m)=>{let g=r==="get"||r==="delete",f=g?void 0:l,d=g?l:m,i=e.generateCacheKey(String(r),u,f);if(n==="cache-first"){let c=e.getFromCache(i);if(c)return console.info(`[OFFLINE] Cache hit for ${r} ${u}`),c;if(e.isOnline())try{let p=g?await a(u,d):await a(u,f,d);return e.setInCache(i,p),p}catch(p){throw console.error(`[OFFLINE] Network error for ${r} ${u}:`,p),p}throw new Error(`[OFFLINE] No cache available and offline for ${r} ${u}`)}if(n==="network-first"){if(e.isOnline())try{let p=g?await a(u,d):await a(u,f,d);return e.setInCache(i,p),p}catch(p){let h=e.getFromCache(i);if(h)return console.warn(`[OFFLINE] Network failed, using cache for ${r} ${u}`),h;throw p}let c=e.getFromCache(i);if(c)return c;throw new Error(`[OFFLINE] Offline and no cache for ${r} ${u}`)}if(n==="network-only"){if(!e.isOnline())throw new Error(`[OFFLINE] Network unavailable for ${r} ${u}`);return g?await a(u,d):await a(u,f,d)}throw new Error(`[OFFLINE] Unknown strategy: ${n}`)}};return {get:o("get"),post:o("post"),patch:o("patch"),put:o("put"),delete:o("delete")}}function te(t,e,s){return v(t)?ee(t,e,s):t}function Ue(t={}){return ({delegate:e,...s})=>{let n=Z(t);return {...s,delegate:te(e,n,t),offline:n}}}function ne({enableMetrics:t=false,enableTracing:e=false,enableLogging:s=false,onEvent:n=()=>{},onMetrics:o=()=>{}}){let r=[],a={requests:{total:0,success:0,errors:0},latency:{avg:0,min:Number.MAX_SAFE_INTEGER,max:Number.MIN_SAFE_INTEGER}};function u(i){r.push(i),g(i),s&&d(i),n(i);}function l(){return e?Math.random().toString(36).substring(2,15):void 0}function m(){return {requests:t?a.requests:{total:0,success:0,errors:0},latency:t?a.latency:{avg:0,min:0,max:0}}}function g(i){if(t){switch(i.type){case "request":a.requests.total++;break;case "response":a.requests.success++,i.duration&&f(i.duration);break;case "error":a.requests.errors++,i.duration&&f(i.duration);break}o(a);}}function f(i){let c=r.filter(p=>p.duration!==void 0).map(p=>p.duration).filter(p=>p>0);c.length>0&&(a.latency.avg=c.reduce((p,h)=>p+h,0)/c.length,a.latency.min=Math.min(...c),a.latency.max=Math.max(...c));}function d(i){let c=i.type==="error"?"error":"info",p=`[TELEMETRY] ${i.operation} ${i.duration?`(${i.duration}ms)`:""}`;i.type==="error"&&i.error?console[c](p,i.error):console[c](p);}return {recordEvent:u,generateTraceId:l,getMetrics:m}}function re(t){let e=new Map;return {before:s=>{let n=t.generateTraceId(),o=`${s.method.toUpperCase()} ${s.url}`,r=Date.now();e.set(o,{time:r,traceId:n}),t.recordEvent({timestamp:r,type:"request",operation:o,traceId:n});},after:s=>{let n=`${s.method.toUpperCase()} ${s.url}`,o=e.get(n);if(o){let r=Date.now()-o.time;t.recordEvent({timestamp:Date.now(),type:"response",operation:n,duration:r,status:200,traceId:o.traceId}),e.delete(n);}return s.response},error:(s,n,o)=>{let r=`${s.toUpperCase()} ${n}`,a=e.get(r);if(a){let u=Date.now()-a.time;t.recordEvent({timestamp:Date.now(),type:"error",operation:r,duration:u,error:o,traceId:a.traceId}),e.delete(r);}}}}function oe(t,e){let s=n=>{let o=e.generateTraceId(),r=Date.now();return e.recordEvent({timestamp:r,type:"request",operation:n,traceId:o}),{success:()=>{let a=Date.now()-r;e.recordEvent({timestamp:Date.now(),type:"response",operation:n,duration:a,status:200,traceId:o});},error:a=>{let u=Date.now()-r;e.recordEvent({timestamp:Date.now(),type:"error",operation:n,duration:u,error:a,traceId:o});}}};return {...t,connect:()=>{let n=s("connect");try{t.connect(),n.success();}catch(o){throw n.error(o),o}},send:n=>{let o=s("send");try{t.send(n),o.success();}catch(r){throw o.error(r),r}},close:()=>{let n=s("close");try{t.close(),n.success();}catch(o){throw n.error(o),o}},onMessage:n=>{let o=s("onMessage");try{let r=t.onMessage(n);return o.success(),r}catch(r){throw o.error(r),r}},onError:n=>t.onError(o=>{s("onError").error(new Error("WebSocket error")),n(o);})}}function se(t,e){return v(t)?k(t,re(e)):O(t)?oe(t,e):t}function Ke(t={}){return ({delegate:e,...s})=>{let n=ne(t);return {...s,delegate:se(e,n),telemetry:n}}}function at(...t){let e=t.reduce((o,r)=>Object.assign(o,r(o)),{}),{onInit:s,...n}=e;return typeof s=="function"&&s(n),n}export{at as universalClient,Ce as withAxiosDelegate,be as withBetterFetchDelegate,Fe as withDelegate,We as withEnvironments,Se as withFetchDelegate,He as withHooks,Oe as withHttpDelegate,qe as withInterceptor,Re as withMethods,Ue as withOffline,xe as withSseDelegate,Ke as withTelemetry,Te as withWebSocketDelegate};//# sourceMappingURL=index.mjs.map
9
9
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/delegate/http/axios-delegate.utils.ts","../src/utils/delegate/http/better-fetch-delegate.utils.ts","../src/utils/delegate/http/fetch-delegate.utils.ts","../src/utils/delegate/http-delegate.utils.ts","../src/utils/delegate/server-sent-event-delegate.utils.ts","../src/utils/delegate/websocket-delegate.utils.ts","../src/utils/delegate.utils.ts","../src/utils/delegate-middleware.utils.ts","../src/features/core/with-delegate/with-delegate.feature.ts","../src/features/core/with-hooks/with-hooks.feature.ts","../src/features/core/with-methods/with-methods.feature.ts","../src/features/delegate/with-environments/with-environments.feature.ts","../src/features/delegate/with-interceptor/with-interceptor.feature.ts","../src/features/delegate/with-offline/with-offline.feature.ts","../src/features/delegate/with-telemetry/with-telemetry.feature.ts","../src/universal-client.ts"],"names":["axios_delegate_utils_exports","__export","createAxiosDelegate","options","axiosModule","axios","baseURL","restOptions","instance","url","requestOptions","response","body","init_axios_delegate_utils","__esmMin","better_fetch_delegate_utils_exports","createBetterFetchDelegate","betterFetchModule","createFetch","init_better_fetch_delegate_utils","parseResponse","format","errorMessage","errorData","getURLSearchParams","params","query","key","value","item","createFetchDelegate","fetchRequest","method","headers","createHttpDelegate","createServerSentEventDelegate","openListeners","messageListeners","errorListeners","eventListeners","eventSource","abortController","closeExisting","dispatchSseEvent","eventType","dataLines","data","listener","callbacks","callback","readSseStream","reader","decoder","buffer","done","lines","line","cleanLine","colonIndex","field","fieldValue","error","errorEvent","event","eventName","handler","e","requestInit","openEvent","createWebSocketDelegate","protocols","reconnectInterval","maxReconnectAttempts","socket","reconnectTimer","reconnectAttempts","closeListeners","reconnect","delegate","message","isHttpDelegate","isWebSocketDelegate","isDelegateOptions","createDelegate","delegateOrOptions","createLazyHttpDelegate","createLazyServerSentEventDelegate","delegatePromise","ensureDelegate","openOptions","d","unsubscribe","wrapHttpDelegate","interceptor","wrapMethod","methodName","originalMethod","bodyOrOptions","optionsArg","isGetOrDelete","context","beforeResult","finalOptions","afterResult","wrapWebSocketDelegate","createDelegateFeature","features","input","rest","acc","feature","result","withDelegate","withHttpDelegate","withFetchDelegate","withAxiosDelegate","withBetterFetchDelegate","withSseDelegate","withWebSocketDelegate","withHooks","hooks","withMethods","methodCreator","createEnvironmentManager","config","environmentKeys","defaultKey","currentEnv","getCurrentEnvironment","setEnvironment","env","fallback","getBaseURL","wrapHttpDelegateWithEnvironments","envManager","buildFullURL","cleanBaseURL","cleanPath","fullURL","wrapWebSocketDelegateWithEnvironments","wrapDelegateWithEnvironments","withEnvironments","name","environments","withInterceptor","_name","isOnline","createOfflineManager","cache","cacheTTL","generateCacheKey","bodyStr","getFromCache","cacheKey","entry","setInCache","wrapHttpDelegateWithOffline","offlineManager","strategy","cached","wrapDelegateWithOffline","withOffline","createTelemetryCollector","enableMetrics","enableTracing","enableLogging","onEvent","onMetrics","events","metrics","recordEvent","updateMetrics","logEvent","generateTraceId","getMetrics","updateLatency","_duration","latencies","sum","lat","logLevel","createTelemetryHttpInterceptor","collector","startTimes","traceId","operation","startTime","startData","duration","wrapWebSocketDelegateWithTelemetry","createTimedOperation","op","wrapDelegateWithTelemetry","withTelemetry","telemetryCollector","universalClient","withFeatures","client","accumulator","onInit"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { HttpRequestOptions } from '../../../types';\nimport type { CreateAxiosDelegateOptions } from './types';\n\nexport async function createAxiosDelegate(options: CreateAxiosDelegateOptions) {\n let axiosModule: {\n default: {\n create: (config: Record<string, unknown>) => unknown;\n get: (url: string, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n post: (url: string, data: unknown, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n patch: (url: string, data: unknown, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n put: (url: string, data: unknown, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n delete: (url: string, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n };\n } | null;\n try {\n axiosModule = await new Function('moduleName', 'return import(moduleName)')('axios');\n } catch {\n axiosModule = null;\n }\n\n if (!axiosModule) {\n throw new Error('Axios is not installed. Please install axios to use the axios delegate.');\n }\n\n const axios = axiosModule.default;\n const { baseURL, ...restOptions } = options;\n const instance = axios.create({ baseURL, ...restOptions }) as {\n get: (url: string, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n post: (url: string, data: unknown, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n patch: (url: string, data: unknown, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n put: (url: string, data: unknown, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n delete: (url: string, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n };\n\n return {\n get<T>(url: string, requestOptions?: HttpRequestOptions) {\n return instance.get(url, { headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n post<T>(url: string, body: unknown, requestOptions?: HttpRequestOptions) {\n return instance.post(url, body, { headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n patch<T>(url: string, body: unknown, requestOptions?: HttpRequestOptions) {\n return instance.patch(url, body, { headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n put<T>(url: string, body: unknown, requestOptions?: HttpRequestOptions) {\n return instance.put(url, body, { headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n delete<T>(url: string, requestOptions?: HttpRequestOptions) {\n return instance.delete(url, { headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n };\n}\n","import type { HttpRequestOptions } from '../../../types';\nimport type { CreateBetterFetchDelegateOptions } from './types';\n\nexport async function createBetterFetchDelegate(options: CreateBetterFetchDelegateOptions) {\n let betterFetchModule: { createFetch: (options: CreateBetterFetchDelegateOptions) => (url: string, options?: Record<string, unknown>) => Promise<{ data: unknown }> } | null;\n try {\n betterFetchModule = await new Function('moduleName', 'return import(moduleName)')('@better-fetch/fetch');\n } catch {\n betterFetchModule = null;\n }\n\n if (!betterFetchModule) {\n throw new Error('@better-fetch/fetch is not installed. Please install @better-fetch/fetch to use the better-fetch delegate.');\n }\n\n const { createFetch } = betterFetchModule;\n const { baseURL, ...restOptions } = options;\n const instance = createFetch({ baseURL, ...restOptions });\n\n return {\n get<T>(url: string, requestOptions?: HttpRequestOptions) {\n return instance(url, { headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n post<T>(url: string, body: unknown, requestOptions?: HttpRequestOptions) {\n return instance(url, { method: 'POST', body, headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n patch<T>(url: string, body: unknown, requestOptions?: HttpRequestOptions) {\n return instance(url, { method: 'PATCH', body, headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n put<T>(url: string, body: unknown, requestOptions?: HttpRequestOptions) {\n return instance(url, { method: 'PUT', body, headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n delete<T>(url: string, requestOptions?: HttpRequestOptions) {\n return instance(url, { method: 'DELETE', headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n };\n}\n","import type { HttpDelegate, HttpRequestOptions } from '../../../types';\nimport type { CreateFetchDelegateOptions } from './types';\n\nfunction parseResponse(format: CreateFetchDelegateOptions['format']) {\n return async (response: Response) => {\n if (!response.ok) {\n let errorMessage = `HTTP ${response.status}: ${response.statusText}`;\n\n try {\n const errorData = await response.clone().json();\n if (errorData.error) {\n errorMessage = errorData.error;\n } else if (errorData.message) {\n errorMessage = errorData.message;\n }\n } catch {\n // keep the default error message\n }\n\n throw new Error(errorMessage);\n }\n\n if (format === 'json') {\n return response.json();\n }\n\n if (format === 'text') {\n return response.text();\n }\n\n return response;\n };\n}\n\nfunction getURLSearchParams(params?: HttpRequestOptions['params']) {\n const query = new URLSearchParams();\n for (const [key, value] of Object.entries(params ?? {})) {\n if (value === undefined || value === null) {\n continue;\n }\n\n if (value instanceof Date) {\n query.append(key, value.toISOString());\n } else if (Array.isArray(value)) {\n for (const item of value) {\n query.append(`${key}[]`, item?.toString() ?? '');\n }\n } else {\n query.append(key, value.toString());\n }\n }\n\n return query.size ? `?${query}` : '';\n}\n\n/**\n * Creates a delegate to handle fetch requests.\n *\n * @param options - The options to be used in the delegate.\n * @returns A delegate to handle fetch requests.\n */\nexport function createFetchDelegate({ baseURL, format = 'json' }: Omit<CreateFetchDelegateOptions, 'type' | 'impl'>): HttpDelegate {\n function fetchRequest<T>(method: string, url: string, body?: unknown, { params = {}, headers = {} }: HttpRequestOptions = {}) {\n const options: RequestInit = {\n method,\n headers: {\n ...headers,\n },\n };\n\n if (body) {\n options.body = JSON.stringify(body);\n }\n\n return fetch(`${baseURL}${url}${getURLSearchParams(params)}`, options).then(parseResponse(format)) as Promise<T>;\n }\n\n return {\n get<T>(url: string, { params = {}, headers = {} }: HttpRequestOptions = {}) {\n return fetchRequest<T>('GET', url, undefined, { params, headers });\n },\n post<T>(url: string, body: unknown, { params = {}, headers = {} }: HttpRequestOptions = {}) {\n return fetchRequest<T>('POST', url, body, { params, headers });\n },\n patch<T>(url: string, body: unknown, { params = {}, headers = {} }: HttpRequestOptions = {}) {\n return fetchRequest<T>('PATCH', url, body, { params, headers });\n },\n put<T>(url: string, body: unknown, { params = {}, headers = {} }: HttpRequestOptions = {}) {\n return fetchRequest<T>('PUT', url, body, { params, headers });\n },\n delete<T>(url: string, { params = {}, headers = {} }: HttpRequestOptions = {}) {\n return fetchRequest<T>('DELETE', url, undefined, { params, headers });\n },\n };\n}\n","import type { HttpDelegate } from '../../types';\nimport { createFetchDelegate } from './http/fetch-delegate.utils';\nimport type { CreateAxiosDelegateOptions, CreateBetterFetchDelegateOptions, CreateFetchDelegateOptions } from './http/types';\n\nexport type HttpDelegateOptions = CreateFetchDelegateOptions | CreateBetterFetchDelegateOptions | CreateAxiosDelegateOptions;\n\nexport async function createHttpDelegate(options: HttpDelegateOptions): Promise<HttpDelegate> {\n if (options.impl === 'axios') {\n const { createAxiosDelegate } = await import('./http/axios-delegate.utils');\n return createAxiosDelegate(options);\n }\n\n if (options.impl === 'better-fetch') {\n const { createBetterFetchDelegate } = await import('./http/better-fetch-delegate.utils');\n return createBetterFetchDelegate(options);\n }\n\n return createFetchDelegate(options);\n}\n","import type { ServerSentEventDelegate, SseOpenOptions } from '../../types';\n\nexport interface CreateServerSentEventDelegateOptions {\n baseURL: string;\n}\n\nexport type ServerSentEventDelegateOptions = {\n type: 'server-sent-event';\n} & CreateServerSentEventDelegateOptions;\n\n/**\n * Creates a delegate to handle Server Sent Events.\n * Supports both GET (via EventSource) and POST (via fetch + ReadableStream) connections.\n * The delegate does not connect automatically — call `open()` to start the connection.\n *\n * @param options - The options to be used in the delegate.\n * @returns A delegate to handle Server Sent Events.\n */\nexport async function createServerSentEventDelegate({ baseURL }: CreateServerSentEventDelegateOptions): Promise<ServerSentEventDelegate> {\n const openListeners: Set<(event: Event) => void> = new Set();\n const messageListeners: Set<(data: unknown) => void> = new Set();\n const errorListeners: Set<(event: Event) => void> = new Set();\n const eventListeners: Map<string, Set<(data: unknown) => void>> = new Map();\n\n let eventSource: EventSource | null = null;\n let abortController: AbortController | null = null;\n\n function closeExisting(): void {\n if (eventSource) {\n eventSource.close();\n eventSource = null;\n }\n\n if (abortController) {\n abortController.abort();\n abortController = null;\n }\n }\n\n function dispatchSseEvent(eventType: string, dataLines: string[]): void {\n const data = dataLines.join('\\n');\n\n if (eventType === '' || eventType === 'message') {\n for (const listener of messageListeners) {\n listener(data);\n }\n }\n\n if (eventType !== '' && eventType !== 'message') {\n const callbacks = eventListeners.get(eventType);\n if (callbacks) {\n for (const callback of callbacks) {\n callback(data);\n }\n }\n }\n }\n\n async function readSseStream(body: ReadableStream<Uint8Array>): Promise<void> {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n let eventType = '';\n let dataLines: string[] = [];\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n if (dataLines.length > 0) {\n dispatchSseEvent(eventType, dataLines);\n }\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n const cleanLine = line.endsWith('\\r') ? line.slice(0, -1) : line;\n\n if (cleanLine === '') {\n if (dataLines.length > 0) {\n dispatchSseEvent(eventType, dataLines);\n eventType = '';\n dataLines = [];\n }\n continue;\n }\n\n if (cleanLine.startsWith(':')) {\n continue;\n }\n\n const colonIndex = cleanLine.indexOf(':');\n let field: string;\n let fieldValue: string;\n\n if (colonIndex === -1) {\n field = cleanLine;\n fieldValue = '';\n } else {\n field = cleanLine.slice(0, colonIndex);\n fieldValue = cleanLine[colonIndex + 1] === ' ' ? cleanLine.slice(colonIndex + 2) : cleanLine.slice(colonIndex + 1);\n }\n\n switch (field) {\n case 'data':\n dataLines.push(fieldValue);\n break;\n case 'event':\n eventType = fieldValue;\n break;\n }\n }\n }\n } catch (error) {\n if (error instanceof DOMException && error.name === 'AbortError') {\n return;\n }\n const errorEvent = new Event('error');\n for (const listener of errorListeners) {\n listener(errorEvent);\n }\n }\n }\n\n return {\n open(options?: SseOpenOptions): void {\n closeExisting();\n\n const url = options?.url ?? baseURL;\n const method = options?.method ?? 'GET';\n\n if (method === 'GET') {\n if (typeof EventSource === 'undefined') {\n throw new Error('EventSource is not available. This delegate only works in browser environments.');\n }\n\n eventSource = new EventSource(url);\n\n eventSource.addEventListener('open', (event) => {\n for (const listener of openListeners) {\n listener(event);\n }\n });\n\n eventSource.addEventListener('error', (event) => {\n for (const listener of errorListeners) {\n listener(event);\n }\n });\n\n eventSource.addEventListener('message', (event) => {\n for (const listener of messageListeners) {\n listener(event.data);\n }\n });\n\n for (const [eventName, callbacks] of eventListeners) {\n for (const callback of callbacks) {\n const handler = (e: MessageEvent) => callback(e.data);\n eventSource.addEventListener(eventName, handler as EventListener);\n }\n }\n } else {\n abortController = new AbortController();\n\n const requestInit: RequestInit = {\n method,\n headers: {\n Accept: 'text/event-stream',\n 'Content-Type': 'application/json',\n ...options?.headers,\n },\n signal: abortController.signal,\n };\n\n if (options?.body !== undefined) {\n requestInit.body = JSON.stringify(options.body);\n }\n\n fetch(url, requestInit)\n .then((response) => {\n if (!response.ok) {\n const errorEvent = new Event('error');\n for (const listener of errorListeners) {\n listener(errorEvent);\n }\n return;\n }\n\n if (!response.body) {\n const errorEvent = new Event('error');\n for (const listener of errorListeners) {\n listener(errorEvent);\n }\n return;\n }\n\n const openEvent = new Event('open');\n for (const listener of openListeners) {\n listener(openEvent);\n }\n\n readSseStream(response.body);\n })\n .catch((error) => {\n if (error instanceof DOMException && error.name === 'AbortError') {\n return;\n }\n const errorEvent = new Event('error');\n for (const listener of errorListeners) {\n listener(errorEvent);\n }\n });\n }\n },\n\n close(): void {\n closeExisting();\n },\n\n onOpen(callback: (event: Event) => void) {\n openListeners.add(callback);\n return () => openListeners.delete(callback);\n },\n\n onError(callback: (event: Event) => void) {\n errorListeners.add(callback);\n return () => errorListeners.delete(callback);\n },\n\n onMessage(callback: (data: unknown) => void) {\n messageListeners.add(callback);\n return () => messageListeners.delete(callback);\n },\n\n subscribe(event: string, callback: (data: unknown) => void) {\n let callbacks = eventListeners.get(event);\n if (!callbacks) {\n callbacks = new Set();\n eventListeners.set(event, callbacks);\n }\n callbacks.add(callback);\n\n if (eventSource) {\n const handler = (e: MessageEvent) => callback(e.data);\n eventSource.addEventListener(event, handler as EventListener);\n return () => {\n callbacks.delete(callback);\n if (eventSource) {\n eventSource.removeEventListener(event, handler as EventListener);\n }\n };\n }\n\n return () => {\n callbacks.delete(callback);\n };\n },\n };\n}\n","import type { WebSocketDelegate } from '../../types';\n\nexport interface CreateWebSocketDelegateOptions {\n baseURL: string;\n protocols?: string | string[];\n reconnectInterval?: number;\n maxReconnectAttempts?: number;\n}\n\nexport type WebSocketDelegateOptions = {\n type: 'websocket';\n} & CreateWebSocketDelegateOptions;\n\n/**\n * Creates a delegate to handle WebSocket requests.\n *\n * @param options - The options to be used in the delegate.\n * @returns A delegate to handle WebSocket requests.\n */\nexport function createWebSocketDelegate({ baseURL, protocols, reconnectInterval = 5000, maxReconnectAttempts = 10 }: CreateWebSocketDelegateOptions): WebSocketDelegate {\n let socket: WebSocket | null = null;\n let reconnectTimer: number | null = null;\n let reconnectAttempts = 0;\n const openListeners: Set<(event: Event) => void> = new Set();\n const messageListeners: Set<(data: unknown) => void> = new Set();\n const closeListeners: Set<(event: CloseEvent) => void> = new Set();\n const errorListeners: Set<(event: Event) => void> = new Set();\n\n function reconnect() {\n if (reconnectTimer !== null || reconnectAttempts >= maxReconnectAttempts) {\n return;\n }\n\n reconnectAttempts++;\n reconnectTimer = window.setTimeout(() => {\n reconnectTimer = null;\n delegate.connect();\n }, reconnectInterval);\n }\n\n const delegate: WebSocketDelegate = {\n connect: () => {\n if (socket) {\n socket.close();\n }\n\n socket = new WebSocket(baseURL, protocols);\n socket.onopen = (event) => {\n reconnectAttempts = 0;\n for (const listener of openListeners) {\n listener(event);\n }\n };\n\n socket.onclose = (event) => {\n for (const listener of closeListeners) {\n listener(event);\n }\n reconnect();\n };\n\n socket.onerror = (event) => {\n for (const listener of errorListeners) {\n listener(event);\n }\n };\n\n socket.onmessage = (event) => {\n let message: unknown;\n try {\n message = JSON.parse(event.data);\n } catch (_error) {\n message = event.data;\n }\n\n for (const listener of messageListeners) {\n listener(message);\n }\n };\n },\n close(): void {\n if (socket) {\n socket.close();\n socket = null;\n }\n\n if (reconnectTimer !== null) {\n window.clearTimeout(reconnectTimer);\n reconnectTimer = null;\n }\n },\n send(message: unknown): void {\n if (socket && socket.readyState === WebSocket.OPEN) {\n socket.send(JSON.stringify(message));\n } else {\n console.warn('WebSocket is not connected. Message not sent.');\n }\n },\n onOpen(callback: (event: Event) => void): () => void {\n openListeners.add(callback);\n return () => openListeners.delete(callback);\n },\n onClose(callback: (event: CloseEvent) => void): () => void {\n closeListeners.add(callback);\n return () => closeListeners.delete(callback);\n },\n onError(callback: (event: Event) => void): () => void {\n errorListeners.add(callback);\n return () => errorListeners.delete(callback);\n },\n onMessage(callback: (data: unknown) => void): () => void {\n messageListeners.add(callback);\n return () => messageListeners.delete(callback);\n },\n };\n\n delegate.connect();\n return delegate;\n}\n","import type { Delegate, HttpDelegate, ServerSentEventDelegate, SseOpenOptions, WebSocketDelegate } from '../types';\nimport { createHttpDelegate, createServerSentEventDelegate, createWebSocketDelegate, type HttpDelegateOptions, type ServerSentEventDelegateOptions, type WebSocketDelegateOptions } from './delegate';\n\nexport function isHttpDelegate(delegate: unknown): delegate is HttpDelegate {\n return typeof delegate === 'object' && delegate !== null && 'get' in delegate && 'post' in delegate && 'patch' in delegate && 'put' in delegate && 'delete' in delegate;\n}\n\nexport function isWebSocketDelegate(delegate: unknown): delegate is WebSocketDelegate {\n return typeof delegate === 'object' && delegate !== null && 'connect' in delegate && 'send' in delegate && 'close' in delegate;\n}\n\nexport function isServerSentEventDelegate(delegate: unknown): delegate is ServerSentEventDelegate {\n return typeof delegate === 'object' && delegate !== null && 'open' in delegate && 'onMessage' in delegate && 'onError' in delegate && 'onOpen' in delegate && 'subscribe' in delegate;\n}\n\nexport function isDelegate(delegate: unknown): delegate is Delegate {\n return isHttpDelegate(delegate) || isWebSocketDelegate(delegate) || isServerSentEventDelegate(delegate);\n}\n\nexport type DelegateOptions = HttpDelegateOptions | WebSocketDelegateOptions | ServerSentEventDelegateOptions;\n\nconst isDelegateOptions = (value: unknown): value is DelegateOptions => {\n return typeof value === 'object' && value !== null && 'type' in value;\n};\n\nexport function createDelegate(delegateOrOptions: Delegate | DelegateOptions): Delegate {\n if (isDelegateOptions(delegateOrOptions)) {\n if (delegateOrOptions.type === 'http') {\n return createLazyHttpDelegate(delegateOrOptions);\n }\n\n if (delegateOrOptions.type === 'websocket') {\n return createWebSocketDelegate(delegateOrOptions);\n }\n\n if (delegateOrOptions.type === 'server-sent-event') {\n return createLazyServerSentEventDelegate(delegateOrOptions);\n }\n\n throw new Error('Unsupported delegate type');\n }\n\n return delegateOrOptions;\n}\n\nfunction createLazyHttpDelegate(options: HttpDelegateOptions): HttpDelegate {\n let delegatePromise: Promise<HttpDelegate> | null = null;\n\n const ensureDelegate = () => {\n if (!delegatePromise) {\n delegatePromise = createHttpDelegate(options);\n }\n return delegatePromise;\n };\n\n return {\n async get<T>(url: string, requestOptions?: Record<string, unknown>): Promise<T> {\n const d = await ensureDelegate();\n return d.get<T>(url, requestOptions);\n },\n async post<T>(url: string, body: unknown, requestOptions?: Record<string, unknown>): Promise<T> {\n const d = await ensureDelegate();\n return d.post<T>(url, body, requestOptions);\n },\n async patch<T>(url: string, body: unknown, requestOptions?: Record<string, unknown>): Promise<T> {\n const d = await ensureDelegate();\n return d.patch<T>(url, body, requestOptions);\n },\n async put<T>(url: string, body: unknown, requestOptions?: Record<string, unknown>): Promise<T> {\n const d = await ensureDelegate();\n return d.put<T>(url, body, requestOptions);\n },\n async delete<T>(url: string, requestOptions?: Record<string, unknown>): Promise<T> {\n const d = await ensureDelegate();\n return d.delete<T>(url, requestOptions);\n },\n };\n}\n\nfunction createLazyServerSentEventDelegate(options: ServerSentEventDelegateOptions): ServerSentEventDelegate {\n let delegatePromise: Promise<ServerSentEventDelegate> | null = null;\n\n const ensureDelegate = () => {\n if (!delegatePromise) {\n delegatePromise = createServerSentEventDelegate(options);\n }\n return delegatePromise;\n };\n\n return {\n open(openOptions?: SseOpenOptions): void {\n ensureDelegate()\n .then((d) => d.open(openOptions))\n .catch((error) => console.error('[SSE] Failed to open connection:', error));\n },\n close(): void {\n if (delegatePromise) {\n delegatePromise.then((d) => d.close()).catch(console.error);\n }\n },\n onOpen(callback: (event: Event) => void): () => void {\n let unsubscribe: (() => void) | null = null;\n ensureDelegate()\n .then((d) => {\n unsubscribe = d.onOpen(callback);\n })\n .catch((error) => console.error('[SSE] Failed to attach onOpen handler:', error));\n return () => {\n if (unsubscribe) {\n unsubscribe();\n }\n };\n },\n onError(callback: (event: Event) => void): () => void {\n let unsubscribe: (() => void) | null = null;\n ensureDelegate()\n .then((d) => {\n unsubscribe = d.onError(callback);\n })\n .catch((error) => console.error('[SSE] Failed to attach onError handler:', error));\n return () => {\n if (unsubscribe) {\n unsubscribe();\n }\n };\n },\n onMessage(callback: (data: unknown) => void): () => void {\n let unsubscribe: (() => void) | null = null;\n ensureDelegate()\n .then((d) => {\n unsubscribe = d.onMessage(callback);\n })\n .catch((error) => console.error('[SSE] Failed to attach onMessage handler:', error));\n return () => {\n if (unsubscribe) {\n unsubscribe();\n }\n };\n },\n subscribe(event: string, callback: (data: unknown) => void): () => void {\n let unsubscribe: (() => void) | null = null;\n ensureDelegate()\n .then((d) => {\n unsubscribe = d.subscribe(event, callback);\n })\n .catch((error) => console.error(`[SSE] Failed to subscribe to event \"${event}\":`, error));\n return () => {\n if (unsubscribe) {\n unsubscribe();\n }\n };\n },\n };\n}\n","import type { HttpDelegate, WebSocketDelegate } from '../types';\n\n/**\n * Context for request interception, allows modifying request properties\n */\nexport interface RequestInterceptorContext {\n method: string;\n url: string;\n headers?: Record<string, string>;\n body?: unknown;\n}\n\n/**\n * Context for response interception\n */\nexport interface ResponseInterceptorContext<T = unknown> {\n method: string;\n url: string;\n response: T;\n}\n\n/**\n * Interceptor for HTTP delegate methods\n */\nexport interface HttpInterceptor {\n before?: (context: RequestInterceptorContext) => undefined | Partial<RequestInterceptorContext> | Promise<Partial<RequestInterceptorContext> | undefined>;\n after?: <T>(context: ResponseInterceptorContext<T>) => undefined | Partial<T> | Promise<Partial<T> | undefined>;\n error?: (method: string, url: string, error: Error, body?: unknown) => void | Promise<void>;\n}\n\n/**\n * Interceptor for WebSocket delegate methods\n */\nexport interface WebSocketInterceptor {\n beforeConnect?: () => void | Promise<void>;\n afterConnect?: () => void | Promise<void>;\n beforeSend?: (message: unknown) => void | Promise<void>;\n afterSend?: (message: unknown) => void | Promise<void>;\n beforeClose?: () => void | Promise<void>;\n afterClose?: () => void | Promise<void>;\n onError?: (error: Error) => void | Promise<void>;\n}\n\n/**\n * Wraps an HTTP delegate with interceptors for all methods\n */\nexport function wrapHttpDelegate(delegate: HttpDelegate, interceptor: HttpInterceptor): HttpDelegate {\n const wrapMethod = (methodName: 'get' | 'post' | 'patch' | 'put' | 'delete') => {\n const originalMethod = delegate[methodName];\n\n return async <T>(url: string, bodyOrOptions?: unknown, optionsArg?: unknown): Promise<T> => {\n // Handle overloaded signatures: (url) or (url, body) or (url, options) or (url, body, options)\n const isGetOrDelete = methodName === 'get' || methodName === 'delete';\n const body = isGetOrDelete ? undefined : bodyOrOptions;\n const options = isGetOrDelete ? (bodyOrOptions as { headers?: Record<string, string> }) : (optionsArg as { headers?: Record<string, string> });\n\n let context: RequestInterceptorContext = { method: methodName, url, headers: options?.headers ?? {}, body };\n try {\n if (interceptor.before) {\n const beforeResult = await interceptor.before(context);\n if (beforeResult && typeof beforeResult === 'object') {\n context = { ...context, ...beforeResult };\n }\n }\n\n const finalOptions = context.headers ? { headers: context.headers } : undefined;\n let response = isGetOrDelete\n ? await (originalMethod as (url: string, options?: { headers?: Record<string, string> }) => Promise<T>)(context.url, finalOptions)\n : await (originalMethod as (url: string, body: unknown, options?: { headers?: Record<string, string> }) => Promise<T>)(context.url, context.body, finalOptions);\n\n // After interceptor\n if (interceptor.after) {\n const afterResult = await interceptor.after<T>({ method: methodName, url: context.url, response });\n if (afterResult && typeof afterResult === 'object') {\n response = { ...response, ...afterResult };\n }\n }\n\n return response;\n } catch (error) {\n if (interceptor.error) {\n await interceptor.error(methodName, context.url, error as Error, context.body);\n }\n\n throw error;\n }\n };\n };\n\n return {\n get: wrapMethod('get') as <T>(url: string, options?: { headers?: Record<string, string> }) => Promise<T>,\n post: wrapMethod('post') as <T>(url: string, body: unknown, options?: { headers?: Record<string, string> }) => Promise<T>,\n patch: wrapMethod('patch') as <T>(url: string, body: unknown, options?: { headers?: Record<string, string> }) => Promise<T>,\n put: wrapMethod('put') as <T>(url: string, body: unknown, options?: { headers?: Record<string, string> }) => Promise<T>,\n delete: wrapMethod('delete') as <T>(url: string, options?: { headers?: Record<string, string> }) => Promise<T>,\n };\n}\n\n/**\n * Wraps a WebSocket delegate with interceptors for connect, send, and close\n */\nexport function wrapWebSocketDelegate(delegate: WebSocketDelegate, interceptor: WebSocketInterceptor): WebSocketDelegate {\n return {\n ...delegate,\n connect: () => {\n if (interceptor.beforeConnect) {\n Promise.resolve(interceptor.beforeConnect()).catch(console.error);\n }\n\n delegate.connect();\n\n if (interceptor.afterConnect) {\n Promise.resolve(interceptor.afterConnect()).catch(console.error);\n }\n },\n\n send: (message: unknown) => {\n if (interceptor.beforeSend) {\n Promise.resolve(interceptor.beforeSend(message)).catch(console.error);\n }\n\n delegate.send(message);\n\n if (interceptor.afterSend) {\n Promise.resolve(interceptor.afterSend(message)).catch(console.error);\n }\n },\n\n close: () => {\n if (interceptor.beforeClose) {\n Promise.resolve(interceptor.beforeClose()).catch(console.error);\n }\n\n delegate.close();\n\n if (interceptor.afterClose) {\n Promise.resolve(interceptor.afterClose()).catch(console.error);\n }\n },\n };\n}\n","import type { DelegateFeature, Feature, HttpDelegate, ServerSentEventDelegate, WebSocketDelegate } from '../../../types';\nimport { createDelegate, type DelegateOptions, type HttpDelegateOptions } from '../../../utils';\nimport type { CreateAxiosDelegateOptions, CreateBetterFetchDelegateOptions, CreateFetchDelegateOptions } from '../../../utils/delegate/http/types';\nimport type { CreateServerSentEventDelegateOptions } from '../../../utils/delegate/server-sent-event-delegate.utils';\nimport type { CreateWebSocketDelegateOptions } from '../../../utils/delegate/websocket-delegate.utils';\n\ntype DelegateFromOptions<O extends DelegateOptions> = O['type'] extends 'http' ? HttpDelegate : O['type'] extends 'websocket' ? WebSocketDelegate : O['type'] extends 'server-sent-event' ? ServerSentEventDelegate : never;\n\nfunction createDelegateFeature(options: DelegateOptions & { name?: string }, ...features: DelegateFeature[]): unknown {\n return (input: Record<string, unknown>) => {\n const { delegate, ...rest } = features.reduce(\n (acc, feature) => {\n const result = feature(acc);\n return Object.assign({}, acc, result);\n },\n { ...input, delegate: createDelegate(options) },\n );\n\n const delegateName = options.name ?? 'delegate';\n\n return {\n [delegateName]: delegate,\n ...rest,\n };\n };\n}\n\n/**\n * Add a delegate to the client.\n *\n * @param options - The options for the delegate.\n * @param features - The features to apply to the delegate.\n * @returns A feature that returns the delegate.\n */\nexport function withDelegate<const Options extends DelegateOptions & { name: string }>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { [key in Options['name']]: DelegateFromOptions<Options> }>;\nexport function withDelegate<const Options extends DelegateOptions>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { delegate: DelegateFromOptions<Options> }>;\nexport function withDelegate(options: DelegateOptions & { name?: string }, ...features: DelegateFeature[]): unknown {\n return createDelegateFeature(options, ...features);\n}\n\ntype WithNameOption = { name?: string };\ntype HttpDelegateShortcutOptions = Omit<HttpDelegateOptions, 'type'> & { impl: 'fetch' | 'axios' | 'better-fetch' } & WithNameOption;\ntype FetchDelegateShortcutOptions = Omit<CreateFetchDelegateOptions, 'type' | 'impl'> & WithNameOption;\ntype AxiosDelegateShortcutOptions = Omit<CreateAxiosDelegateOptions, 'type' | 'impl'> & WithNameOption;\ntype BetterFetchDelegateShortcutOptions = Omit<CreateBetterFetchDelegateOptions, 'type' | 'impl'> & WithNameOption;\ntype SseDelegateShortcutOptions = CreateServerSentEventDelegateOptions & WithNameOption;\ntype WebSocketDelegateShortcutOptions = CreateWebSocketDelegateOptions & WithNameOption;\n\nexport function withHttpDelegate<const Options extends HttpDelegateShortcutOptions & { name: string }>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { [key in Options['name']]: HttpDelegate }>;\nexport function withHttpDelegate(options: HttpDelegateShortcutOptions, ...features: DelegateFeature[]): Feature<unknown, { delegate: HttpDelegate }>;\nexport function withHttpDelegate(options: HttpDelegateShortcutOptions, ...features: DelegateFeature[]): unknown {\n return createDelegateFeature({ ...options, type: 'http' } as HttpDelegateOptions & WithNameOption, ...features);\n}\n\nexport function withFetchDelegate<const Options extends FetchDelegateShortcutOptions & { name: string }>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { [key in Options['name']]: HttpDelegate }>;\nexport function withFetchDelegate(options: FetchDelegateShortcutOptions, ...features: DelegateFeature[]): Feature<unknown, { delegate: HttpDelegate }>;\nexport function withFetchDelegate(options: FetchDelegateShortcutOptions, ...features: DelegateFeature[]): unknown {\n return createDelegateFeature({ ...options, type: 'http' }, ...features);\n}\n\nexport function withAxiosDelegate<const Options extends AxiosDelegateShortcutOptions & { name: string }>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { [key in Options['name']]: HttpDelegate }>;\nexport function withAxiosDelegate(options: AxiosDelegateShortcutOptions, ...features: DelegateFeature[]): Feature<unknown, { delegate: HttpDelegate }>;\nexport function withAxiosDelegate(options: AxiosDelegateShortcutOptions, ...features: DelegateFeature[]): unknown {\n return createDelegateFeature({ ...options, type: 'http', impl: 'axios' } as CreateAxiosDelegateOptions & WithNameOption, ...features);\n}\n\nexport function withBetterFetchDelegate<const Options extends BetterFetchDelegateShortcutOptions & { name: string }>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { [key in Options['name']]: HttpDelegate }>;\nexport function withBetterFetchDelegate(options: BetterFetchDelegateShortcutOptions, ...features: DelegateFeature[]): Feature<unknown, { delegate: HttpDelegate }>;\nexport function withBetterFetchDelegate(options: BetterFetchDelegateShortcutOptions, ...features: DelegateFeature[]): unknown {\n return createDelegateFeature({ ...options, type: 'http', impl: 'better-fetch' } as CreateBetterFetchDelegateOptions & WithNameOption, ...features);\n}\n\nexport function withSseDelegate<const Options extends SseDelegateShortcutOptions & { name: string }>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { [key in Options['name']]: ServerSentEventDelegate }>;\nexport function withSseDelegate(options: SseDelegateShortcutOptions, ...features: DelegateFeature[]): Feature<unknown, { delegate: ServerSentEventDelegate }>;\nexport function withSseDelegate(options: SseDelegateShortcutOptions, ...features: DelegateFeature[]): unknown {\n return createDelegateFeature({ ...options, type: 'server-sent-event' }, ...features);\n}\n\nexport function withWebSocketDelegate<const Options extends WebSocketDelegateShortcutOptions & { name: string }>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { [key in Options['name']]: WebSocketDelegate }>;\nexport function withWebSocketDelegate(options: WebSocketDelegateShortcutOptions, ...features: DelegateFeature[]): Feature<unknown, { delegate: WebSocketDelegate }>;\nexport function withWebSocketDelegate(options: WebSocketDelegateShortcutOptions, ...features: DelegateFeature[]): unknown {\n return createDelegateFeature({ ...options, type: 'websocket' }, ...features);\n}\n","import type { Feature } from '../../../types';\n\ninterface Hooks<Input> {\n onInit?: (input: Input) => void;\n}\n\n/**\n * Add hooks to the client.\n *\n * @param hooks - The hooks to be used in the feature.\n * @returns A feature that returns the hooks.\n */\nexport function withHooks<H extends Hooks<Input>, Input>(hooks: H): Feature<Input, Input> {\n return () => ({ ...hooks }) as unknown as Input;\n}\n","import type { Feature } from '../../../types';\n\n/**\n * Add methods to the client.\n *\n * @param methodCreator - The method creator to be used in the feature.\n * @returns A feature that returns the methods.\n */\nexport function withMethods<Methods, Input>(methodCreator: (input: Input) => Methods): Feature<Input, Methods & Input> {\n return (input) => ({ ...methodCreator(input), ...input });\n}\n","import type { Feature, HttpDelegate, WebSocketDelegate } from '../../../types';\nimport { isHttpDelegate, isWebSocketDelegate, wrapHttpDelegate, wrapWebSocketDelegate } from '../../../utils';\n\ntype Environments = Record<string, string>;\n\ninterface EnvironmentsConfig<Input, Environment extends Environments = Environments> {\n name: keyof Input;\n environments: Environment;\n default?: keyof Environment;\n fallback?: keyof Environment;\n}\n\ninterface EnvironmentManager<Environment extends Environments> {\n getCurrentEnvironment(): keyof Environment;\n setEnvironment(env: keyof Environment): void;\n getBaseURL(): string;\n}\n\nfunction createEnvironmentManager<Input, Environment extends Environments>(config: EnvironmentsConfig<Input, Environment>): EnvironmentManager<Environment> {\n const environmentKeys = Object.keys(config.environments);\n const defaultKey = config.default || environmentKeys[0];\n let currentEnv = defaultKey;\n\n function getCurrentEnvironment(): keyof Environment {\n return currentEnv;\n }\n\n function setEnvironment(env: string): void {\n if (!config.environments[env]) {\n const fallback = config.fallback || defaultKey;\n console.warn(`[ENVIRONMENTS] Environment \"${env}\" not found, falling back to \"${String(fallback)}\"`);\n currentEnv = fallback;\n } else {\n currentEnv = env;\n console.info(`[ENVIRONMENTS] Switched to environment: ${env} (${config.environments[env]})`);\n }\n }\n\n function getBaseURL() {\n return config.environments[currentEnv] || config.environments[Object.keys(config.environments)[0]];\n }\n\n return {\n getCurrentEnvironment,\n setEnvironment,\n getBaseURL,\n };\n}\n\nfunction wrapHttpDelegateWithEnvironments<Environment extends Environments>(delegate: HttpDelegate, envManager: EnvironmentManager<Environment>): HttpDelegate {\n const buildFullURL = (url: string) => {\n const baseURL = envManager.getBaseURL();\n if (url.startsWith('http')) {\n return url;\n }\n\n const cleanBaseURL = baseURL.replace(/\\/$/, '');\n const cleanPath = url.startsWith('/') ? url : `/${url}`;\n const fullURL = `${cleanBaseURL}${cleanPath}`;\n console.info(`[ENVIRONMENTS] Building URL: ${cleanBaseURL} + ${cleanPath} = ${fullURL}`);\n return fullURL;\n };\n\n return wrapHttpDelegate(delegate, {\n before: (context) => {\n return { url: buildFullURL(context.url) };\n },\n });\n}\n\nfunction wrapWebSocketDelegateWithEnvironments<Environment extends Environments>(delegate: WebSocketDelegate, envManager: EnvironmentManager<Environment>): WebSocketDelegate {\n return wrapWebSocketDelegate(delegate, {\n beforeConnect: () => {\n console.info(`[ENVIRONMENTS] WebSocket connecting to: ${envManager.getBaseURL()}`);\n },\n });\n}\n\nfunction wrapDelegateWithEnvironments<Environment extends Environments>(delegate: unknown, envManager: EnvironmentManager<Environment>): unknown {\n if (isHttpDelegate(delegate)) {\n return wrapHttpDelegateWithEnvironments(delegate, envManager);\n }\n\n if (isWebSocketDelegate(delegate)) {\n return wrapWebSocketDelegateWithEnvironments(delegate, envManager);\n }\n\n return delegate;\n}\n\nexport function withEnvironments<Input, Environment extends Environments>(config: EnvironmentsConfig<Input, Environment>): Feature<Input, Input & { environments: EnvironmentManager<Environment> }> {\n return (input: Input) => {\n const { name } = config;\n const environments = createEnvironmentManager(config);\n\n return {\n ...input,\n [name]: wrapDelegateWithEnvironments(input[name], environments),\n environments,\n };\n };\n}\n","import type { DelegateFeature } from '../../../types';\nimport { isHttpDelegate, wrapHttpDelegate } from '../../../utils';\nimport type { HttpInterceptor } from '../../../utils/delegate-middleware.utils';\n\nexport interface InterceptorConfig extends HttpInterceptor {\n name?: string;\n}\n\n/**\n * Add HTTP interceptor to the delegate.\n *\n * @param config - The interceptor configuration.\n * @returns A delegate feature that wraps the HTTP delegate with the interceptor.\n */\nexport function withInterceptor(config: InterceptorConfig): DelegateFeature {\n return ({ delegate, ...rest }) => {\n const { name: _name, ...interceptor } = config;\n\n if (isHttpDelegate(delegate)) {\n return {\n ...rest,\n delegate: wrapHttpDelegate(delegate, interceptor),\n };\n }\n\n return { ...rest, delegate };\n };\n}\n","import type { Delegate, DelegateFeature, HttpDelegate } from '../../../types';\nimport { isHttpDelegate } from '../../../utils';\n\ninterface OfflineConfig {\n /**\n * The strategy to use for the offline manager.\n * @default 'cache-first'\n */\n strategy?: 'cache-first' | 'network-first' | 'network-only';\n /**\n * The TTL for the cache in milliseconds.\n * @default 300000 (5 minutes)\n */\n cacheTTL?: number;\n}\n\ninterface CacheEntry<T = unknown> {\n data: T;\n timestamp: number;\n ttl: number;\n}\n\ninterface OfflineManager {\n isOnline(): boolean;\n clearCache(): void;\n getCacheSize(): number;\n}\n\ninterface ExtendedOfflineManager extends OfflineManager {\n getFromCache: <T>(key: string) => T | null;\n setInCache: <T>(key: string, data: T) => void;\n generateCacheKey: (method: string, url: string, body?: unknown) => string;\n}\n\nfunction isOnline(): boolean {\n return typeof navigator !== 'undefined' && navigator.onLine !== undefined ? navigator.onLine : true;\n}\n\nfunction createOfflineManager(config: OfflineConfig): ExtendedOfflineManager {\n const cache = new Map<string, CacheEntry>();\n const cacheTTL = config.cacheTTL ?? 300000;\n\n function generateCacheKey(method: string, url: string, body?: unknown): string {\n const bodyStr = body ? JSON.stringify(body) : '';\n return `${method}:${url}:${bodyStr}`;\n }\n\n function getFromCache<T>(cacheKey: string): T | null {\n const entry = cache.get(cacheKey);\n if (!entry) {\n return null;\n }\n\n if (Date.now() - entry.timestamp > entry.ttl) {\n cache.delete(cacheKey);\n return null;\n }\n\n return entry.data as T;\n }\n\n function setInCache<T>(cacheKey: string, data: T): void {\n cache.set(cacheKey, {\n data,\n timestamp: Date.now(),\n ttl: cacheTTL,\n });\n }\n\n return {\n isOnline,\n clearCache: () => cache.clear(),\n getCacheSize: () => cache.size,\n getFromCache: getFromCache,\n setInCache: setInCache,\n generateCacheKey: generateCacheKey,\n };\n}\n\nfunction wrapHttpDelegateWithOffline(delegate: HttpDelegate, offlineManager: ExtendedOfflineManager, config: OfflineConfig): HttpDelegate {\n const strategy = config.strategy ?? 'cache-first';\n\n const wrapMethod = <K extends keyof HttpDelegate>(methodName: K) => {\n const originalMethod = delegate[methodName];\n\n return async <T>(url: string, bodyOrOptions?: unknown, optionsArg?: unknown): Promise<T> => {\n // Handle overloaded signatures\n const isGetOrDelete = methodName === 'get' || methodName === 'delete';\n const body = isGetOrDelete ? undefined : bodyOrOptions;\n const options = isGetOrDelete ? bodyOrOptions : optionsArg;\n\n const cacheKey = offlineManager.generateCacheKey(String(methodName), url, body);\n\n if (strategy === 'cache-first') {\n const cached = offlineManager.getFromCache<T>(cacheKey);\n if (cached) {\n console.info(`[OFFLINE] Cache hit for ${methodName} ${url}`);\n return cached;\n }\n\n if (offlineManager.isOnline()) {\n try {\n const result = isGetOrDelete ? await (originalMethod as (url: string, options?: unknown) => Promise<T>)(url, options) : await (originalMethod as (url: string, body: unknown, options?: unknown) => Promise<T>)(url, body, options);\n offlineManager.setInCache(cacheKey, result);\n return result;\n } catch (error) {\n console.error(`[OFFLINE] Network error for ${methodName} ${url}:`, error);\n throw error;\n }\n }\n\n throw new Error(`[OFFLINE] No cache available and offline for ${methodName} ${url}`);\n }\n\n if (strategy === 'network-first') {\n if (offlineManager.isOnline()) {\n try {\n const result = isGetOrDelete ? await (originalMethod as (url: string, options?: unknown) => Promise<T>)(url, options) : await (originalMethod as (url: string, body: unknown, options?: unknown) => Promise<T>)(url, body, options);\n offlineManager.setInCache(cacheKey, result);\n return result;\n } catch (error) {\n const cached = offlineManager.getFromCache<T>(cacheKey);\n if (cached) {\n console.warn(`[OFFLINE] Network failed, using cache for ${methodName} ${url}`);\n return cached;\n }\n throw error;\n }\n }\n\n const cached = offlineManager.getFromCache<T>(cacheKey);\n if (cached) {\n return cached;\n }\n throw new Error(`[OFFLINE] Offline and no cache for ${methodName} ${url}`);\n }\n\n if (strategy === 'network-only') {\n if (!offlineManager.isOnline()) {\n throw new Error(`[OFFLINE] Network unavailable for ${methodName} ${url}`);\n }\n return isGetOrDelete ? await (originalMethod as (url: string, options?: unknown) => Promise<T>)(url, options) : await (originalMethod as (url: string, body: unknown, options?: unknown) => Promise<T>)(url, body, options);\n }\n\n throw new Error(`[OFFLINE] Unknown strategy: ${strategy}`);\n };\n };\n\n return {\n get: wrapMethod('get'),\n post: wrapMethod('post'),\n patch: wrapMethod('patch'),\n put: wrapMethod('put'),\n delete: wrapMethod('delete'),\n };\n}\n\nfunction wrapDelegateWithOffline(delegate: Delegate, offlineManager: ExtendedOfflineManager, config: OfflineConfig): Delegate {\n if (isHttpDelegate(delegate)) {\n return wrapHttpDelegateWithOffline(delegate, offlineManager, config);\n }\n\n return delegate;\n}\n\nexport function withOffline(config: OfflineConfig = {}): DelegateFeature<{ offline: OfflineManager }> {\n return ({ delegate, ...rest }) => {\n const offlineManager = createOfflineManager(config);\n\n return {\n ...rest,\n delegate: wrapDelegateWithOffline(delegate, offlineManager, config),\n offline: offlineManager,\n };\n };\n}\n","import type { Delegate, DelegateFeature, WebSocketDelegate } from '../../../types';\nimport { type HttpInterceptor, isHttpDelegate, isWebSocketDelegate, type ResponseInterceptorContext, wrapHttpDelegate } from '../../../utils';\n\ninterface TelemetryEvent {\n timestamp: number;\n type: 'request' | 'response' | 'error';\n operation: string;\n duration?: number;\n status?: number;\n error?: Error;\n traceId?: string;\n}\n\ninterface TelemetryMetrics {\n requests: { total: number; success: number; errors: number };\n latency: { avg: number; min: number; max: number };\n}\n\ninterface TelemetryCollector {\n recordEvent: (event: TelemetryEvent) => void;\n generateTraceId: () => string | undefined;\n getMetrics: () => TelemetryMetrics;\n}\n\ninterface TelemetryOptions {\n enableMetrics?: boolean;\n enableTracing?: boolean;\n enableLogging?: boolean;\n onEvent?: (event: TelemetryEvent) => void;\n onMetrics?: (metrics: TelemetryMetrics) => void;\n}\n\nfunction createTelemetryCollector({ enableMetrics = false, enableTracing = false, enableLogging = false, onEvent = () => {}, onMetrics = () => {} }: TelemetryOptions): TelemetryCollector {\n const events: TelemetryEvent[] = [];\n const metrics: TelemetryMetrics = {\n requests: { total: 0, success: 0, errors: 0 },\n latency: { avg: 0, min: Number.MAX_SAFE_INTEGER, max: Number.MIN_SAFE_INTEGER },\n };\n\n function recordEvent(event: TelemetryEvent): void {\n events.push(event);\n updateMetrics(event);\n\n if (enableLogging) {\n logEvent(event);\n }\n\n onEvent(event);\n }\n\n function generateTraceId(): string | undefined {\n return enableTracing ? Math.random().toString(36).substring(2, 15) : undefined;\n }\n\n function getMetrics(): TelemetryMetrics {\n return {\n requests: enableMetrics ? metrics.requests : { total: 0, success: 0, errors: 0 },\n latency: enableMetrics ? metrics.latency : { avg: 0, min: 0, max: 0 },\n };\n }\n\n function updateMetrics(event: TelemetryEvent): void {\n if (!enableMetrics) {\n return;\n }\n\n switch (event.type) {\n case 'request':\n metrics.requests.total++;\n break;\n\n case 'response':\n metrics.requests.success++;\n if (event.duration) {\n updateLatency(event.duration);\n }\n break;\n\n case 'error':\n metrics.requests.errors++;\n if (event.duration) {\n updateLatency(event.duration);\n }\n break;\n }\n\n onMetrics(metrics);\n }\n\n function updateLatency(_duration: number): void {\n const latencies = events\n .filter((event): event is TelemetryEvent & { duration: number } => event.duration !== undefined)\n .map((event) => event.duration)\n .filter((d) => d > 0);\n\n if (latencies.length > 0) {\n metrics.latency.avg = latencies.reduce((sum, lat) => sum + lat, 0) / latencies.length;\n metrics.latency.min = Math.min(...latencies);\n metrics.latency.max = Math.max(...latencies);\n }\n }\n\n function logEvent(event: TelemetryEvent): void {\n const logLevel = event.type === 'error' ? 'error' : 'info';\n const message = `[TELEMETRY] ${event.operation} ${event.duration ? `(${event.duration}ms)` : ''}`;\n\n if (event.type === 'error' && event.error) {\n console[logLevel](message, event.error);\n } else {\n console[logLevel](message);\n }\n }\n\n return {\n recordEvent,\n generateTraceId,\n getMetrics,\n };\n}\n\nfunction createTelemetryHttpInterceptor(collector: TelemetryCollector): HttpInterceptor {\n const startTimes = new Map<string, { time: number; traceId: string | undefined }>();\n\n return {\n before: (context: { method: string; url: string }) => {\n const traceId = collector.generateTraceId();\n const operation = `${context.method.toUpperCase()} ${context.url}`;\n const startTime = Date.now();\n\n startTimes.set(operation, { time: startTime, traceId });\n\n collector.recordEvent({\n timestamp: startTime,\n type: 'request',\n operation,\n traceId,\n });\n\n return undefined;\n },\n after: <T>(context: ResponseInterceptorContext<T>) => {\n const operation = `${context.method.toUpperCase()} ${context.url}`;\n const startData = startTimes.get(operation);\n\n if (startData) {\n const duration = Date.now() - startData.time;\n\n collector.recordEvent({\n timestamp: Date.now(),\n type: 'response',\n operation,\n duration,\n status: 200,\n traceId: startData.traceId,\n });\n\n startTimes.delete(operation);\n }\n\n return context.response;\n },\n error: (method: string, url: string, error: Error) => {\n const operation = `${method.toUpperCase()} ${url}`;\n const startData = startTimes.get(operation);\n\n if (startData) {\n const duration = Date.now() - startData.time;\n\n collector.recordEvent({\n timestamp: Date.now(),\n type: 'error',\n operation,\n duration,\n error,\n traceId: startData.traceId,\n });\n\n startTimes.delete(operation);\n }\n },\n } as HttpInterceptor;\n}\n\nfunction wrapWebSocketDelegateWithTelemetry(delegate: WebSocketDelegate, collector: TelemetryCollector): WebSocketDelegate {\n const createTimedOperation = (operation: string) => {\n const traceId = collector.generateTraceId();\n const startTime = Date.now();\n\n collector.recordEvent({\n timestamp: startTime,\n type: 'request',\n operation,\n traceId,\n });\n\n return {\n success: () => {\n const duration = Date.now() - startTime;\n collector.recordEvent({\n timestamp: Date.now(),\n type: 'response',\n operation,\n duration,\n status: 200,\n traceId,\n });\n },\n error: (error: Error) => {\n const duration = Date.now() - startTime;\n collector.recordEvent({\n timestamp: Date.now(),\n type: 'error',\n operation,\n duration,\n error,\n traceId,\n });\n },\n };\n };\n\n return {\n ...delegate,\n connect: () => {\n const op = createTimedOperation('connect');\n try {\n delegate.connect();\n op.success();\n } catch (error) {\n op.error(error as Error);\n throw error;\n }\n },\n send: (message: unknown) => {\n const op = createTimedOperation('send');\n try {\n delegate.send(message);\n op.success();\n } catch (error) {\n op.error(error as Error);\n throw error;\n }\n },\n close: () => {\n const op = createTimedOperation('close');\n try {\n delegate.close();\n op.success();\n } catch (error) {\n op.error(error as Error);\n throw error;\n }\n },\n onMessage: (callback: (data: unknown) => void) => {\n const op = createTimedOperation('onMessage');\n try {\n const result = delegate.onMessage(callback);\n op.success();\n return result;\n } catch (error) {\n op.error(error as Error);\n throw error;\n }\n },\n onError: (callback: (event: Event) => void) => {\n return delegate.onError((event: Event) => {\n const op = createTimedOperation('onError');\n op.error(new Error('WebSocket error'));\n callback(event);\n });\n },\n };\n}\n\nfunction wrapDelegateWithTelemetry(delegate: Delegate, collector: TelemetryCollector): Delegate {\n if (isHttpDelegate(delegate)) {\n return wrapHttpDelegate(delegate, createTelemetryHttpInterceptor(collector));\n }\n\n if (isWebSocketDelegate(delegate)) {\n return wrapWebSocketDelegateWithTelemetry(delegate, collector);\n }\n\n return delegate;\n}\n\nexport function withTelemetry(options: TelemetryOptions = {}): DelegateFeature<{ telemetry: TelemetryCollector }> {\n return ({ delegate, ...rest }) => {\n const telemetryCollector = createTelemetryCollector(options);\n\n return {\n ...rest,\n delegate: wrapDelegateWithTelemetry(delegate, telemetryCollector),\n telemetry: telemetryCollector,\n };\n };\n}\n","import type { Feature } from './types';\n\ntype Merge<A, B> = Omit<A, keyof B> & B;\n\n/**\n * Creates a universal client that combines multiple features.\n *\n * @param features - The features to be used in the client.\n * @returns A universal client that combines multiple features.\n */\nexport function universalClient<A>(featureA: Feature<unknown, A>): A;\nexport function universalClient<A, B>(featureA: Feature<unknown, A>, featureB: Feature<A, B>): Merge<A, B>;\nexport function universalClient<A, B, C>(featureA: Feature<unknown, A>, featureB: Feature<A, B>, featureC: Feature<Merge<A, B>, C>): Merge<Merge<A, B>, C>;\nexport function universalClient<A, B, C, D>(featureA: Feature<unknown, A>, featureB: Feature<A, B>, featureC: Feature<Merge<A, B>, C>, featureD: Feature<Merge<Merge<A, B>, C>, D>): Merge<Merge<Merge<A, B>, C>, D>;\nexport function universalClient<A, B, C, D, E>(\n featureA: Feature<unknown, A>,\n featureB: Feature<A, B>,\n featureC: Feature<Merge<A, B>, C>,\n featureD: Feature<Merge<Merge<A, B>, C>, D>,\n featureE: Feature<Merge<Merge<Merge<A, B>, C>, D>, E>,\n): Merge<Merge<Merge<Merge<A, B>, C>, D>, E>;\nexport function universalClient<A, B, C, D, E, F>(\n featureA: Feature<unknown, A>,\n featureB: Feature<A, B>,\n featureC: Feature<Merge<A, B>, C>,\n featureD: Feature<Merge<Merge<A, B>, C>, D>,\n featureE: Feature<Merge<Merge<Merge<A, B>, C>, D>, E>,\n featureF: Feature<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>,\n): Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>;\nexport function universalClient<A, B, C, D, E, F, G>(\n featureA: Feature<unknown, A>,\n featureB: Feature<A, B>,\n featureC: Feature<Merge<A, B>, C>,\n featureD: Feature<Merge<Merge<A, B>, C>, D>,\n featureE: Feature<Merge<Merge<Merge<A, B>, C>, D>, E>,\n featureF: Feature<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>,\n featureG: Feature<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>,\n): Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>;\nexport function universalClient<A, B, C, D, E, F, G, H>(\n featureA: Feature<unknown, A>,\n featureB: Feature<A, B>,\n featureC: Feature<Merge<A, B>, C>,\n featureD: Feature<Merge<Merge<A, B>, C>, D>,\n featureE: Feature<Merge<Merge<Merge<A, B>, C>, D>, E>,\n featureF: Feature<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>,\n featureG: Feature<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>,\n featureH: Feature<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>,\n): Merge<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>;\nexport function universalClient<A, B, C, D, E, F, G, H, I>(\n featureA: Feature<unknown, A>,\n featureB: Feature<A, B>,\n featureC: Feature<Merge<A, B>, C>,\n featureD: Feature<Merge<Merge<A, B>, C>, D>,\n featureE: Feature<Merge<Merge<Merge<A, B>, C>, D>, E>,\n featureF: Feature<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>,\n featureG: Feature<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>,\n featureH: Feature<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>,\n featureI: Feature<Merge<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>, I>,\n): Merge<Merge<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>, I>;\nexport function universalClient<A, B, C, D, E, F, G, H, I, J>(\n featureA: Feature<unknown, A>,\n featureB: Feature<A, B>,\n featureC: Feature<Merge<A, B>, C>,\n featureD: Feature<Merge<Merge<A, B>, C>, D>,\n featureE: Feature<Merge<Merge<Merge<A, B>, C>, D>, E>,\n featureF: Feature<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>,\n featureG: Feature<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>,\n featureH: Feature<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>,\n featureI: Feature<Merge<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>, I>,\n featureJ: Feature<Merge<Merge<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>, I>, J>,\n): Merge<Merge<Merge<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>, I>, J>;\nexport function universalClient(...withFeatures: Feature<unknown, unknown>[]): unknown;\nexport function universalClient(...withFeatures: Feature<unknown, unknown>[]) {\n // biome-ignore lint/performance/noAccumulatingSpread: needed for typescript\n const client = withFeatures.reduce((accumulator, feature) => Object.assign(accumulator, feature(accumulator)), {});\n\n // Extract onInit hook if present\n const { onInit, ...rest } = client as Record<string, unknown>;\n\n // Call onInit hook if it exists\n if (typeof onInit === 'function') {\n onInit(rest);\n }\n\n return rest;\n}\n"]}
1
+ {"version":3,"sources":["../src/utils/delegate/http/axios-delegate.utils.ts","../src/utils/delegate/http/better-fetch-delegate.utils.ts","../src/utils/delegate/http/fetch-delegate.utils.ts","../src/utils/delegate/http-delegate.utils.ts","../src/utils/delegate/server-sent-event-delegate.utils.ts","../src/utils/delegate/websocket-delegate.utils.ts","../src/utils/delegate.utils.ts","../src/utils/delegate-middleware.utils.ts","../src/features/core/with-delegate/with-delegate.feature.ts","../src/features/core/with-hooks/with-hooks.feature.ts","../src/features/core/with-methods/with-methods.feature.ts","../src/features/delegate/with-environments/with-environments.feature.ts","../src/features/delegate/with-interceptor/with-interceptor.feature.ts","../src/features/delegate/with-offline/with-offline.feature.ts","../src/features/delegate/with-telemetry/with-telemetry.feature.ts","../src/universal-client.ts"],"names":["axios_delegate_utils_exports","__export","createAxiosDelegate","options","axiosModule","axios","baseURL","restOptions","instance","url","requestOptions","response","body","init_axios_delegate_utils","__esmMin","better_fetch_delegate_utils_exports","createBetterFetchDelegate","betterFetchModule","createFetch","init_better_fetch_delegate_utils","parseResponse","format","errorMessage","errorData","getURLSearchParams","params","query","key","value","item","createFetchDelegate","fetchRequest","method","headers","createHttpDelegate","createServerSentEventDelegate","openListeners","messageListeners","errorListeners","eventListeners","eventSource","abortController","closeExisting","dispatchSseEvent","eventType","dataLines","data","listener","callbacks","callback","readSseStream","reader","decoder","buffer","done","lines","line","cleanLine","colonIndex","field","fieldValue","error","errorEvent","event","eventName","handler","e","requestInit","openEvent","createWebSocketDelegate","protocols","reconnectInterval","maxReconnectAttempts","socket","reconnectTimer","reconnectAttempts","closeListeners","reconnect","delegate","message","isHttpDelegate","isWebSocketDelegate","isDelegateOptions","createDelegate","delegateOrOptions","createLazyHttpDelegate","createLazyServerSentEventDelegate","delegatePromise","ensureDelegate","openOptions","d","unsubscribe","wrapHttpDelegate","interceptor","wrapMethod","methodName","originalMethod","bodyOrOptions","optionsArg","isGetOrDelete","context","beforeResult","finalOptions","afterResult","wrapWebSocketDelegate","createDelegateFeature","features","input","rest","acc","feature","result","withDelegate","withHttpDelegate","withFetchDelegate","withAxiosDelegate","withBetterFetchDelegate","withSseDelegate","withWebSocketDelegate","withHooks","hooks","withMethods","methodCreator","createEnvironmentManager","config","environmentKeys","defaultKey","currentEnv","getCurrentEnvironment","setEnvironment","env","fallback","getBaseURL","wrapHttpDelegateWithEnvironments","envManager","buildFullURL","cleanBaseURL","cleanPath","fullURL","wrapWebSocketDelegateWithEnvironments","wrapDelegateWithEnvironments","withEnvironments","name","environments","withInterceptor","_name","isOnline","createOfflineManager","cache","cacheTTL","generateCacheKey","bodyStr","getFromCache","cacheKey","entry","setInCache","wrapHttpDelegateWithOffline","offlineManager","strategy","cached","wrapDelegateWithOffline","withOffline","createTelemetryCollector","enableMetrics","enableTracing","enableLogging","onEvent","onMetrics","events","metrics","recordEvent","updateMetrics","logEvent","generateTraceId","getMetrics","updateLatency","_duration","latencies","sum","lat","logLevel","createTelemetryHttpInterceptor","collector","startTimes","traceId","operation","startTime","startData","duration","wrapWebSocketDelegateWithTelemetry","createTimedOperation","op","wrapDelegateWithTelemetry","withTelemetry","telemetryCollector","universalClient","withFeatures","client","accumulator","onInit"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { HttpRequestOptions } from '../../../types';\nimport type { CreateAxiosDelegateOptions } from './types';\n\nexport async function createAxiosDelegate(options: CreateAxiosDelegateOptions) {\n let axiosModule: {\n default: {\n create: (config: Record<string, unknown>) => unknown;\n get: (url: string, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n post: (url: string, data: unknown, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n patch: (url: string, data: unknown, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n put: (url: string, data: unknown, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n delete: (url: string, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n };\n } | null;\n try {\n axiosModule = await new Function('moduleName', 'return import(moduleName)')('axios');\n } catch {\n axiosModule = null;\n }\n\n if (!axiosModule) {\n throw new Error('Axios is not installed. Please install axios to use the axios delegate.');\n }\n\n const axios = axiosModule.default;\n const { baseURL, ...restOptions } = options;\n const instance = axios.create({ baseURL, ...restOptions }) as {\n get: (url: string, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n post: (url: string, data: unknown, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n patch: (url: string, data: unknown, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n put: (url: string, data: unknown, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n delete: (url: string, config?: Record<string, unknown>) => Promise<{ data: unknown }>;\n };\n\n return {\n get<T>(url: string, requestOptions?: HttpRequestOptions) {\n return instance.get(url, { headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n post<T>(url: string, body: unknown, requestOptions?: HttpRequestOptions) {\n return instance.post(url, body, { headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n patch<T>(url: string, body: unknown, requestOptions?: HttpRequestOptions) {\n return instance.patch(url, body, { headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n put<T>(url: string, body: unknown, requestOptions?: HttpRequestOptions) {\n return instance.put(url, body, { headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n delete<T>(url: string, requestOptions?: HttpRequestOptions) {\n return instance.delete(url, { headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n };\n}\n","import type { HttpRequestOptions } from '../../../types';\nimport type { CreateBetterFetchDelegateOptions } from './types';\n\nexport async function createBetterFetchDelegate(options: CreateBetterFetchDelegateOptions) {\n let betterFetchModule: { createFetch: (options: CreateBetterFetchDelegateOptions) => (url: string, options?: Record<string, unknown>) => Promise<{ data: unknown }> } | null;\n try {\n betterFetchModule = await new Function('moduleName', 'return import(moduleName)')('@better-fetch/fetch');\n } catch {\n betterFetchModule = null;\n }\n\n if (!betterFetchModule) {\n throw new Error('@better-fetch/fetch is not installed. Please install @better-fetch/fetch to use the better-fetch delegate.');\n }\n\n const { createFetch } = betterFetchModule;\n const { baseURL, ...restOptions } = options;\n const instance = createFetch({ baseURL, ...restOptions });\n\n return {\n get<T>(url: string, requestOptions?: HttpRequestOptions) {\n return instance(url, { headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n post<T>(url: string, body: unknown, requestOptions?: HttpRequestOptions) {\n return instance(url, { method: 'POST', body, headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n patch<T>(url: string, body: unknown, requestOptions?: HttpRequestOptions) {\n return instance(url, { method: 'PATCH', body, headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n put<T>(url: string, body: unknown, requestOptions?: HttpRequestOptions) {\n return instance(url, { method: 'PUT', body, headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n delete<T>(url: string, requestOptions?: HttpRequestOptions) {\n return instance(url, { method: 'DELETE', headers: requestOptions?.headers }).then((response: { data: unknown }) => response.data) as Promise<T>;\n },\n };\n}\n","import type { HttpDelegate, HttpRequestOptions } from '../../../types';\nimport type { CreateFetchDelegateOptions } from './types';\n\nfunction parseResponse(format: CreateFetchDelegateOptions['format']) {\n return async (response: Response) => {\n if (!response.ok) {\n let errorMessage = `HTTP ${response.status}: ${response.statusText}`;\n\n try {\n const errorData = await response.clone().json();\n if (errorData.error) {\n errorMessage = errorData.error;\n } else if (errorData.message) {\n errorMessage = errorData.message;\n }\n } catch {\n // keep the default error message\n }\n\n throw new Error(errorMessage);\n }\n\n if (format === 'json') {\n return response.json();\n }\n\n if (format === 'text') {\n return response.text();\n }\n\n return response;\n };\n}\n\nfunction getURLSearchParams(params?: HttpRequestOptions['params']) {\n const query = new URLSearchParams();\n for (const [key, value] of Object.entries(params ?? {})) {\n if (value === undefined || value === null) {\n continue;\n }\n\n if (value instanceof Date) {\n query.append(key, value.toISOString());\n } else if (Array.isArray(value)) {\n for (const item of value) {\n query.append(`${key}[]`, item?.toString() ?? '');\n }\n } else {\n query.append(key, value.toString());\n }\n }\n\n return query.size ? `?${query}` : '';\n}\n\n/**\n * Creates a delegate to handle fetch requests.\n *\n * @param options - The options to be used in the delegate.\n * @returns A delegate to handle fetch requests.\n */\nexport function createFetchDelegate({ baseURL, format = 'json' }: Omit<CreateFetchDelegateOptions, 'type' | 'impl'>): HttpDelegate {\n function fetchRequest<T>(method: string, url: string, body?: unknown, { params = {}, headers = {} }: HttpRequestOptions = {}) {\n const options: RequestInit = {\n method,\n headers: {\n ...headers,\n },\n };\n\n if (body !== undefined && body !== null) {\n if (body instanceof FormData || body instanceof Blob || body instanceof ArrayBuffer || body instanceof URLSearchParams || body instanceof ReadableStream || typeof body === 'string') {\n options.body = body;\n } else {\n options.body = JSON.stringify(body);\n (options.headers as Record<string, string>)['Content-Type'] ??= 'application/json';\n }\n }\n\n return fetch(`${baseURL}${url}${getURLSearchParams(params)}`, options).then(parseResponse(format)) as Promise<T>;\n }\n\n return {\n get<T>(url: string, { params = {}, headers = {} }: HttpRequestOptions = {}) {\n return fetchRequest<T>('GET', url, undefined, { params, headers });\n },\n post<T>(url: string, body: unknown, { params = {}, headers = {} }: HttpRequestOptions = {}) {\n return fetchRequest<T>('POST', url, body, { params, headers });\n },\n patch<T>(url: string, body: unknown, { params = {}, headers = {} }: HttpRequestOptions = {}) {\n return fetchRequest<T>('PATCH', url, body, { params, headers });\n },\n put<T>(url: string, body: unknown, { params = {}, headers = {} }: HttpRequestOptions = {}) {\n return fetchRequest<T>('PUT', url, body, { params, headers });\n },\n delete<T>(url: string, { params = {}, headers = {} }: HttpRequestOptions = {}) {\n return fetchRequest<T>('DELETE', url, undefined, { params, headers });\n },\n };\n}\n","import type { HttpDelegate } from '../../types';\nimport { createFetchDelegate } from './http/fetch-delegate.utils';\nimport type { CreateAxiosDelegateOptions, CreateBetterFetchDelegateOptions, CreateFetchDelegateOptions } from './http/types';\n\nexport type HttpDelegateOptions = CreateFetchDelegateOptions | CreateBetterFetchDelegateOptions | CreateAxiosDelegateOptions;\n\nexport async function createHttpDelegate(options: HttpDelegateOptions): Promise<HttpDelegate> {\n if (options.impl === 'axios') {\n const { createAxiosDelegate } = await import('./http/axios-delegate.utils');\n return createAxiosDelegate(options);\n }\n\n if (options.impl === 'better-fetch') {\n const { createBetterFetchDelegate } = await import('./http/better-fetch-delegate.utils');\n return createBetterFetchDelegate(options);\n }\n\n return createFetchDelegate(options);\n}\n","import type { ServerSentEventDelegate, SseOpenOptions } from '../../types';\n\nexport interface CreateServerSentEventDelegateOptions {\n baseURL: string;\n}\n\nexport type ServerSentEventDelegateOptions = {\n type: 'server-sent-event';\n} & CreateServerSentEventDelegateOptions;\n\n/**\n * Creates a delegate to handle Server Sent Events.\n * Supports both GET (via EventSource) and POST (via fetch + ReadableStream) connections.\n * The delegate does not connect automatically — call `open()` to start the connection.\n *\n * @param options - The options to be used in the delegate.\n * @returns A delegate to handle Server Sent Events.\n */\nexport async function createServerSentEventDelegate({ baseURL }: CreateServerSentEventDelegateOptions): Promise<ServerSentEventDelegate> {\n const openListeners: Set<(event: Event) => void> = new Set();\n const messageListeners: Set<(data: unknown) => void> = new Set();\n const errorListeners: Set<(event: Event) => void> = new Set();\n const eventListeners: Map<string, Set<(data: unknown) => void>> = new Map();\n\n let eventSource: EventSource | null = null;\n let abortController: AbortController | null = null;\n\n function closeExisting(): void {\n if (eventSource) {\n eventSource.close();\n eventSource = null;\n }\n\n if (abortController) {\n abortController.abort();\n abortController = null;\n }\n }\n\n function dispatchSseEvent(eventType: string, dataLines: string[]): void {\n const data = dataLines.join('\\n');\n\n if (eventType === '' || eventType === 'message') {\n for (const listener of messageListeners) {\n listener(data);\n }\n }\n\n if (eventType !== '' && eventType !== 'message') {\n const callbacks = eventListeners.get(eventType);\n if (callbacks) {\n for (const callback of callbacks) {\n callback(data);\n }\n }\n }\n }\n\n async function readSseStream(body: ReadableStream<Uint8Array>): Promise<void> {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n let eventType = '';\n let dataLines: string[] = [];\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n if (dataLines.length > 0) {\n dispatchSseEvent(eventType, dataLines);\n }\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n const cleanLine = line.endsWith('\\r') ? line.slice(0, -1) : line;\n\n if (cleanLine === '') {\n if (dataLines.length > 0) {\n dispatchSseEvent(eventType, dataLines);\n eventType = '';\n dataLines = [];\n }\n continue;\n }\n\n if (cleanLine.startsWith(':')) {\n continue;\n }\n\n const colonIndex = cleanLine.indexOf(':');\n let field: string;\n let fieldValue: string;\n\n if (colonIndex === -1) {\n field = cleanLine;\n fieldValue = '';\n } else {\n field = cleanLine.slice(0, colonIndex);\n fieldValue = cleanLine[colonIndex + 1] === ' ' ? cleanLine.slice(colonIndex + 2) : cleanLine.slice(colonIndex + 1);\n }\n\n switch (field) {\n case 'data':\n dataLines.push(fieldValue);\n break;\n case 'event':\n eventType = fieldValue;\n break;\n }\n }\n }\n } catch (error) {\n if (error instanceof DOMException && error.name === 'AbortError') {\n return;\n }\n const errorEvent = new Event('error');\n for (const listener of errorListeners) {\n listener(errorEvent);\n }\n }\n }\n\n return {\n open(options?: SseOpenOptions): void {\n closeExisting();\n\n const url = options?.url ?? baseURL;\n const method = options?.method ?? 'GET';\n\n if (method === 'GET') {\n if (typeof EventSource === 'undefined') {\n throw new Error('EventSource is not available. This delegate only works in browser environments.');\n }\n\n eventSource = new EventSource(url);\n\n eventSource.addEventListener('open', (event) => {\n for (const listener of openListeners) {\n listener(event);\n }\n });\n\n eventSource.addEventListener('error', (event) => {\n for (const listener of errorListeners) {\n listener(event);\n }\n });\n\n eventSource.addEventListener('message', (event) => {\n for (const listener of messageListeners) {\n listener(event.data);\n }\n });\n\n for (const [eventName, callbacks] of eventListeners) {\n for (const callback of callbacks) {\n const handler = (e: MessageEvent) => callback(e.data);\n eventSource.addEventListener(eventName, handler as EventListener);\n }\n }\n } else {\n abortController = new AbortController();\n\n const requestInit: RequestInit = {\n method,\n headers: {\n Accept: 'text/event-stream',\n 'Content-Type': 'application/json',\n ...options?.headers,\n },\n signal: abortController.signal,\n };\n\n if (options?.body !== undefined) {\n requestInit.body = JSON.stringify(options.body);\n }\n\n fetch(url, requestInit)\n .then((response) => {\n if (!response.ok) {\n const errorEvent = new Event('error');\n for (const listener of errorListeners) {\n listener(errorEvent);\n }\n return;\n }\n\n if (!response.body) {\n const errorEvent = new Event('error');\n for (const listener of errorListeners) {\n listener(errorEvent);\n }\n return;\n }\n\n const openEvent = new Event('open');\n for (const listener of openListeners) {\n listener(openEvent);\n }\n\n readSseStream(response.body);\n })\n .catch((error) => {\n if (error instanceof DOMException && error.name === 'AbortError') {\n return;\n }\n const errorEvent = new Event('error');\n for (const listener of errorListeners) {\n listener(errorEvent);\n }\n });\n }\n },\n\n close(): void {\n closeExisting();\n },\n\n onOpen(callback: (event: Event) => void) {\n openListeners.add(callback);\n return () => openListeners.delete(callback);\n },\n\n onError(callback: (event: Event) => void) {\n errorListeners.add(callback);\n return () => errorListeners.delete(callback);\n },\n\n onMessage(callback: (data: unknown) => void) {\n messageListeners.add(callback);\n return () => messageListeners.delete(callback);\n },\n\n subscribe(event: string, callback: (data: unknown) => void) {\n let callbacks = eventListeners.get(event);\n if (!callbacks) {\n callbacks = new Set();\n eventListeners.set(event, callbacks);\n }\n callbacks.add(callback);\n\n if (eventSource) {\n const handler = (e: MessageEvent) => callback(e.data);\n eventSource.addEventListener(event, handler as EventListener);\n return () => {\n callbacks.delete(callback);\n if (eventSource) {\n eventSource.removeEventListener(event, handler as EventListener);\n }\n };\n }\n\n return () => {\n callbacks.delete(callback);\n };\n },\n };\n}\n","import type { WebSocketDelegate } from '../../types';\n\nexport interface CreateWebSocketDelegateOptions {\n baseURL: string;\n protocols?: string | string[];\n reconnectInterval?: number;\n maxReconnectAttempts?: number;\n}\n\nexport type WebSocketDelegateOptions = {\n type: 'websocket';\n} & CreateWebSocketDelegateOptions;\n\n/**\n * Creates a delegate to handle WebSocket requests.\n *\n * @param options - The options to be used in the delegate.\n * @returns A delegate to handle WebSocket requests.\n */\nexport function createWebSocketDelegate({ baseURL, protocols, reconnectInterval = 5000, maxReconnectAttempts = 10 }: CreateWebSocketDelegateOptions): WebSocketDelegate {\n let socket: WebSocket | null = null;\n let reconnectTimer: number | null = null;\n let reconnectAttempts = 0;\n const openListeners: Set<(event: Event) => void> = new Set();\n const messageListeners: Set<(data: unknown) => void> = new Set();\n const closeListeners: Set<(event: CloseEvent) => void> = new Set();\n const errorListeners: Set<(event: Event) => void> = new Set();\n\n function reconnect() {\n if (reconnectTimer !== null || reconnectAttempts >= maxReconnectAttempts) {\n return;\n }\n\n reconnectAttempts++;\n reconnectTimer = window.setTimeout(() => {\n reconnectTimer = null;\n delegate.connect();\n }, reconnectInterval);\n }\n\n const delegate: WebSocketDelegate = {\n connect: () => {\n if (socket) {\n socket.close();\n }\n\n socket = new WebSocket(baseURL, protocols);\n socket.onopen = (event) => {\n reconnectAttempts = 0;\n for (const listener of openListeners) {\n listener(event);\n }\n };\n\n socket.onclose = (event) => {\n for (const listener of closeListeners) {\n listener(event);\n }\n reconnect();\n };\n\n socket.onerror = (event) => {\n for (const listener of errorListeners) {\n listener(event);\n }\n };\n\n socket.onmessage = (event) => {\n let message: unknown;\n try {\n message = JSON.parse(event.data);\n } catch (_error) {\n message = event.data;\n }\n\n for (const listener of messageListeners) {\n listener(message);\n }\n };\n },\n close(): void {\n if (socket) {\n socket.close();\n socket = null;\n }\n\n if (reconnectTimer !== null) {\n window.clearTimeout(reconnectTimer);\n reconnectTimer = null;\n }\n },\n send(message: unknown): void {\n if (socket && socket.readyState === WebSocket.OPEN) {\n socket.send(JSON.stringify(message));\n } else {\n console.warn('WebSocket is not connected. Message not sent.');\n }\n },\n onOpen(callback: (event: Event) => void): () => void {\n openListeners.add(callback);\n return () => openListeners.delete(callback);\n },\n onClose(callback: (event: CloseEvent) => void): () => void {\n closeListeners.add(callback);\n return () => closeListeners.delete(callback);\n },\n onError(callback: (event: Event) => void): () => void {\n errorListeners.add(callback);\n return () => errorListeners.delete(callback);\n },\n onMessage(callback: (data: unknown) => void): () => void {\n messageListeners.add(callback);\n return () => messageListeners.delete(callback);\n },\n };\n\n delegate.connect();\n return delegate;\n}\n","import type { Delegate, HttpDelegate, ServerSentEventDelegate, SseOpenOptions, WebSocketDelegate } from '../types';\nimport { createHttpDelegate, createServerSentEventDelegate, createWebSocketDelegate, type HttpDelegateOptions, type ServerSentEventDelegateOptions, type WebSocketDelegateOptions } from './delegate';\n\nexport function isHttpDelegate(delegate: unknown): delegate is HttpDelegate {\n return typeof delegate === 'object' && delegate !== null && 'get' in delegate && 'post' in delegate && 'patch' in delegate && 'put' in delegate && 'delete' in delegate;\n}\n\nexport function isWebSocketDelegate(delegate: unknown): delegate is WebSocketDelegate {\n return typeof delegate === 'object' && delegate !== null && 'connect' in delegate && 'send' in delegate && 'close' in delegate;\n}\n\nexport function isServerSentEventDelegate(delegate: unknown): delegate is ServerSentEventDelegate {\n return typeof delegate === 'object' && delegate !== null && 'open' in delegate && 'onMessage' in delegate && 'onError' in delegate && 'onOpen' in delegate && 'subscribe' in delegate;\n}\n\nexport function isDelegate(delegate: unknown): delegate is Delegate {\n return isHttpDelegate(delegate) || isWebSocketDelegate(delegate) || isServerSentEventDelegate(delegate);\n}\n\nexport type DelegateOptions = HttpDelegateOptions | WebSocketDelegateOptions | ServerSentEventDelegateOptions;\n\nconst isDelegateOptions = (value: unknown): value is DelegateOptions => {\n return typeof value === 'object' && value !== null && 'type' in value;\n};\n\nexport function createDelegate(delegateOrOptions: Delegate | DelegateOptions): Delegate {\n if (isDelegateOptions(delegateOrOptions)) {\n if (delegateOrOptions.type === 'http') {\n return createLazyHttpDelegate(delegateOrOptions);\n }\n\n if (delegateOrOptions.type === 'websocket') {\n return createWebSocketDelegate(delegateOrOptions);\n }\n\n if (delegateOrOptions.type === 'server-sent-event') {\n return createLazyServerSentEventDelegate(delegateOrOptions);\n }\n\n throw new Error('Unsupported delegate type');\n }\n\n return delegateOrOptions;\n}\n\nfunction createLazyHttpDelegate(options: HttpDelegateOptions): HttpDelegate {\n let delegatePromise: Promise<HttpDelegate> | null = null;\n\n const ensureDelegate = () => {\n if (!delegatePromise) {\n delegatePromise = createHttpDelegate(options);\n }\n return delegatePromise;\n };\n\n return {\n async get<T>(url: string, requestOptions?: Record<string, unknown>): Promise<T> {\n const d = await ensureDelegate();\n return d.get<T>(url, requestOptions);\n },\n async post<T>(url: string, body: unknown, requestOptions?: Record<string, unknown>): Promise<T> {\n const d = await ensureDelegate();\n return d.post<T>(url, body, requestOptions);\n },\n async patch<T>(url: string, body: unknown, requestOptions?: Record<string, unknown>): Promise<T> {\n const d = await ensureDelegate();\n return d.patch<T>(url, body, requestOptions);\n },\n async put<T>(url: string, body: unknown, requestOptions?: Record<string, unknown>): Promise<T> {\n const d = await ensureDelegate();\n return d.put<T>(url, body, requestOptions);\n },\n async delete<T>(url: string, requestOptions?: Record<string, unknown>): Promise<T> {\n const d = await ensureDelegate();\n return d.delete<T>(url, requestOptions);\n },\n };\n}\n\nfunction createLazyServerSentEventDelegate(options: ServerSentEventDelegateOptions): ServerSentEventDelegate {\n let delegatePromise: Promise<ServerSentEventDelegate> | null = null;\n\n const ensureDelegate = () => {\n if (!delegatePromise) {\n delegatePromise = createServerSentEventDelegate(options);\n }\n return delegatePromise;\n };\n\n return {\n open(openOptions?: SseOpenOptions): void {\n ensureDelegate()\n .then((d) => d.open(openOptions))\n .catch((error) => console.error('[SSE] Failed to open connection:', error));\n },\n close(): void {\n if (delegatePromise) {\n delegatePromise.then((d) => d.close()).catch(console.error);\n }\n },\n onOpen(callback: (event: Event) => void): () => void {\n let unsubscribe: (() => void) | null = null;\n ensureDelegate()\n .then((d) => {\n unsubscribe = d.onOpen(callback);\n })\n .catch((error) => console.error('[SSE] Failed to attach onOpen handler:', error));\n return () => {\n if (unsubscribe) {\n unsubscribe();\n }\n };\n },\n onError(callback: (event: Event) => void): () => void {\n let unsubscribe: (() => void) | null = null;\n ensureDelegate()\n .then((d) => {\n unsubscribe = d.onError(callback);\n })\n .catch((error) => console.error('[SSE] Failed to attach onError handler:', error));\n return () => {\n if (unsubscribe) {\n unsubscribe();\n }\n };\n },\n onMessage(callback: (data: unknown) => void): () => void {\n let unsubscribe: (() => void) | null = null;\n ensureDelegate()\n .then((d) => {\n unsubscribe = d.onMessage(callback);\n })\n .catch((error) => console.error('[SSE] Failed to attach onMessage handler:', error));\n return () => {\n if (unsubscribe) {\n unsubscribe();\n }\n };\n },\n subscribe(event: string, callback: (data: unknown) => void): () => void {\n let unsubscribe: (() => void) | null = null;\n ensureDelegate()\n .then((d) => {\n unsubscribe = d.subscribe(event, callback);\n })\n .catch((error) => console.error(`[SSE] Failed to subscribe to event \"${event}\":`, error));\n return () => {\n if (unsubscribe) {\n unsubscribe();\n }\n };\n },\n };\n}\n","import type { HttpDelegate, WebSocketDelegate } from '../types';\n\n/**\n * Context for request interception, allows modifying request properties\n */\nexport interface RequestInterceptorContext {\n method: string;\n url: string;\n headers?: Record<string, string>;\n body?: unknown;\n}\n\n/**\n * Context for response interception\n */\nexport interface ResponseInterceptorContext<T = unknown> {\n method: string;\n url: string;\n response: T;\n}\n\n/**\n * Interceptor for HTTP delegate methods\n */\nexport interface HttpInterceptor {\n before?: (context: RequestInterceptorContext) => undefined | Partial<RequestInterceptorContext> | Promise<Partial<RequestInterceptorContext> | undefined>;\n after?: <T>(context: ResponseInterceptorContext<T>) => undefined | Partial<T> | Promise<Partial<T> | undefined>;\n error?: (method: string, url: string, error: Error, body?: unknown) => void | Promise<void>;\n}\n\n/**\n * Interceptor for WebSocket delegate methods\n */\nexport interface WebSocketInterceptor {\n beforeConnect?: () => void | Promise<void>;\n afterConnect?: () => void | Promise<void>;\n beforeSend?: (message: unknown) => void | Promise<void>;\n afterSend?: (message: unknown) => void | Promise<void>;\n beforeClose?: () => void | Promise<void>;\n afterClose?: () => void | Promise<void>;\n onError?: (error: Error) => void | Promise<void>;\n}\n\n/**\n * Wraps an HTTP delegate with interceptors for all methods\n */\nexport function wrapHttpDelegate(delegate: HttpDelegate, interceptor: HttpInterceptor): HttpDelegate {\n const wrapMethod = (methodName: 'get' | 'post' | 'patch' | 'put' | 'delete') => {\n const originalMethod = delegate[methodName];\n\n return async <T>(url: string, bodyOrOptions?: unknown, optionsArg?: unknown): Promise<T> => {\n // Handle overloaded signatures: (url) or (url, body) or (url, options) or (url, body, options)\n const isGetOrDelete = methodName === 'get' || methodName === 'delete';\n const body = isGetOrDelete ? undefined : bodyOrOptions;\n const options = isGetOrDelete ? (bodyOrOptions as { headers?: Record<string, string> }) : (optionsArg as { headers?: Record<string, string> });\n\n let context: RequestInterceptorContext = { method: methodName, url, headers: options?.headers ?? {}, body };\n try {\n if (interceptor.before) {\n const beforeResult = await interceptor.before(context);\n if (beforeResult && typeof beforeResult === 'object') {\n context = { ...context, ...beforeResult };\n }\n }\n\n const finalOptions = context.headers ? { headers: context.headers } : undefined;\n let response = isGetOrDelete\n ? await (originalMethod as (url: string, options?: { headers?: Record<string, string> }) => Promise<T>)(context.url, finalOptions)\n : await (originalMethod as (url: string, body: unknown, options?: { headers?: Record<string, string> }) => Promise<T>)(context.url, context.body, finalOptions);\n\n // After interceptor\n if (interceptor.after) {\n const afterResult = await interceptor.after<T>({ method: methodName, url: context.url, response });\n if (afterResult && typeof afterResult === 'object') {\n response = { ...response, ...afterResult };\n }\n }\n\n return response;\n } catch (error) {\n if (interceptor.error) {\n await interceptor.error(methodName, context.url, error as Error, context.body);\n }\n\n throw error;\n }\n };\n };\n\n return {\n get: wrapMethod('get') as <T>(url: string, options?: { headers?: Record<string, string> }) => Promise<T>,\n post: wrapMethod('post') as <T>(url: string, body: unknown, options?: { headers?: Record<string, string> }) => Promise<T>,\n patch: wrapMethod('patch') as <T>(url: string, body: unknown, options?: { headers?: Record<string, string> }) => Promise<T>,\n put: wrapMethod('put') as <T>(url: string, body: unknown, options?: { headers?: Record<string, string> }) => Promise<T>,\n delete: wrapMethod('delete') as <T>(url: string, options?: { headers?: Record<string, string> }) => Promise<T>,\n };\n}\n\n/**\n * Wraps a WebSocket delegate with interceptors for connect, send, and close\n */\nexport function wrapWebSocketDelegate(delegate: WebSocketDelegate, interceptor: WebSocketInterceptor): WebSocketDelegate {\n return {\n ...delegate,\n connect: () => {\n if (interceptor.beforeConnect) {\n Promise.resolve(interceptor.beforeConnect()).catch(console.error);\n }\n\n delegate.connect();\n\n if (interceptor.afterConnect) {\n Promise.resolve(interceptor.afterConnect()).catch(console.error);\n }\n },\n\n send: (message: unknown) => {\n if (interceptor.beforeSend) {\n Promise.resolve(interceptor.beforeSend(message)).catch(console.error);\n }\n\n delegate.send(message);\n\n if (interceptor.afterSend) {\n Promise.resolve(interceptor.afterSend(message)).catch(console.error);\n }\n },\n\n close: () => {\n if (interceptor.beforeClose) {\n Promise.resolve(interceptor.beforeClose()).catch(console.error);\n }\n\n delegate.close();\n\n if (interceptor.afterClose) {\n Promise.resolve(interceptor.afterClose()).catch(console.error);\n }\n },\n };\n}\n","import type { DelegateFeature, Feature, HttpDelegate, ServerSentEventDelegate, WebSocketDelegate } from '../../../types';\nimport { createDelegate, type DelegateOptions, type HttpDelegateOptions } from '../../../utils';\nimport type { CreateAxiosDelegateOptions, CreateBetterFetchDelegateOptions, CreateFetchDelegateOptions } from '../../../utils/delegate/http/types';\nimport type { CreateServerSentEventDelegateOptions } from '../../../utils/delegate/server-sent-event-delegate.utils';\nimport type { CreateWebSocketDelegateOptions } from '../../../utils/delegate/websocket-delegate.utils';\n\ntype DelegateFromOptions<O extends DelegateOptions> = O['type'] extends 'http' ? HttpDelegate : O['type'] extends 'websocket' ? WebSocketDelegate : O['type'] extends 'server-sent-event' ? ServerSentEventDelegate : never;\n\nfunction createDelegateFeature(options: DelegateOptions & { name?: string }, ...features: DelegateFeature[]): unknown {\n return (input: Record<string, unknown>) => {\n const { delegate, ...rest } = features.reduce(\n (acc, feature) => {\n const result = feature(acc);\n return Object.assign({}, acc, result);\n },\n { ...input, delegate: createDelegate(options) },\n );\n\n const delegateName = options.name ?? 'delegate';\n\n return {\n [delegateName]: delegate,\n ...rest,\n };\n };\n}\n\n/**\n * Add a delegate to the client.\n *\n * @param options - The options for the delegate.\n * @param features - The features to apply to the delegate.\n * @returns A feature that returns the delegate.\n */\nexport function withDelegate<const Options extends DelegateOptions & { name: string }>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { [key in Options['name']]: DelegateFromOptions<Options> }>;\nexport function withDelegate<const Options extends DelegateOptions>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { delegate: DelegateFromOptions<Options> }>;\nexport function withDelegate(options: DelegateOptions & { name?: string }, ...features: DelegateFeature[]): unknown {\n return createDelegateFeature(options, ...features);\n}\n\ntype WithNameOption = { name?: string };\ntype HttpDelegateShortcutOptions = Omit<HttpDelegateOptions, 'type'> & { impl: 'fetch' | 'axios' | 'better-fetch' } & WithNameOption;\ntype FetchDelegateShortcutOptions = Omit<CreateFetchDelegateOptions, 'type' | 'impl'> & WithNameOption;\ntype AxiosDelegateShortcutOptions = Omit<CreateAxiosDelegateOptions, 'type' | 'impl'> & WithNameOption;\ntype BetterFetchDelegateShortcutOptions = Omit<CreateBetterFetchDelegateOptions, 'type' | 'impl'> & WithNameOption;\ntype SseDelegateShortcutOptions = CreateServerSentEventDelegateOptions & WithNameOption;\ntype WebSocketDelegateShortcutOptions = CreateWebSocketDelegateOptions & WithNameOption;\n\nexport function withHttpDelegate<const Options extends HttpDelegateShortcutOptions & { name: string }>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { [key in Options['name']]: HttpDelegate }>;\nexport function withHttpDelegate(options: HttpDelegateShortcutOptions, ...features: DelegateFeature[]): Feature<unknown, { delegate: HttpDelegate }>;\nexport function withHttpDelegate(options: HttpDelegateShortcutOptions, ...features: DelegateFeature[]): unknown {\n return createDelegateFeature({ ...options, type: 'http' } as HttpDelegateOptions & WithNameOption, ...features);\n}\n\nexport function withFetchDelegate<const Options extends FetchDelegateShortcutOptions & { name: string }>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { [key in Options['name']]: HttpDelegate }>;\nexport function withFetchDelegate(options: FetchDelegateShortcutOptions, ...features: DelegateFeature[]): Feature<unknown, { delegate: HttpDelegate }>;\nexport function withFetchDelegate(options: FetchDelegateShortcutOptions, ...features: DelegateFeature[]): unknown {\n return createDelegateFeature({ ...options, type: 'http' }, ...features);\n}\n\nexport function withAxiosDelegate<const Options extends AxiosDelegateShortcutOptions & { name: string }>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { [key in Options['name']]: HttpDelegate }>;\nexport function withAxiosDelegate(options: AxiosDelegateShortcutOptions, ...features: DelegateFeature[]): Feature<unknown, { delegate: HttpDelegate }>;\nexport function withAxiosDelegate(options: AxiosDelegateShortcutOptions, ...features: DelegateFeature[]): unknown {\n return createDelegateFeature({ ...options, type: 'http', impl: 'axios' } as CreateAxiosDelegateOptions & WithNameOption, ...features);\n}\n\nexport function withBetterFetchDelegate<const Options extends BetterFetchDelegateShortcutOptions & { name: string }>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { [key in Options['name']]: HttpDelegate }>;\nexport function withBetterFetchDelegate(options: BetterFetchDelegateShortcutOptions, ...features: DelegateFeature[]): Feature<unknown, { delegate: HttpDelegate }>;\nexport function withBetterFetchDelegate(options: BetterFetchDelegateShortcutOptions, ...features: DelegateFeature[]): unknown {\n return createDelegateFeature({ ...options, type: 'http', impl: 'better-fetch' } as CreateBetterFetchDelegateOptions & WithNameOption, ...features);\n}\n\nexport function withSseDelegate<const Options extends SseDelegateShortcutOptions & { name: string }>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { [key in Options['name']]: ServerSentEventDelegate }>;\nexport function withSseDelegate(options: SseDelegateShortcutOptions, ...features: DelegateFeature[]): Feature<unknown, { delegate: ServerSentEventDelegate }>;\nexport function withSseDelegate(options: SseDelegateShortcutOptions, ...features: DelegateFeature[]): unknown {\n return createDelegateFeature({ ...options, type: 'server-sent-event' }, ...features);\n}\n\nexport function withWebSocketDelegate<const Options extends WebSocketDelegateShortcutOptions & { name: string }>(options: Options, ...features: DelegateFeature[]): Feature<unknown, { [key in Options['name']]: WebSocketDelegate }>;\nexport function withWebSocketDelegate(options: WebSocketDelegateShortcutOptions, ...features: DelegateFeature[]): Feature<unknown, { delegate: WebSocketDelegate }>;\nexport function withWebSocketDelegate(options: WebSocketDelegateShortcutOptions, ...features: DelegateFeature[]): unknown {\n return createDelegateFeature({ ...options, type: 'websocket' }, ...features);\n}\n","import type { Feature } from '../../../types';\n\ninterface Hooks<Input> {\n onInit?: (input: Input) => void;\n}\n\n/**\n * Add hooks to the client.\n *\n * @param hooks - The hooks to be used in the feature.\n * @returns A feature that returns the hooks.\n */\nexport function withHooks<H extends Hooks<Input>, Input>(hooks: H): Feature<Input, Input> {\n return () => ({ ...hooks }) as unknown as Input;\n}\n","import type { Feature } from '../../../types';\n\n/**\n * Add methods to the client.\n *\n * @param methodCreator - The method creator to be used in the feature.\n * @returns A feature that returns the methods.\n */\nexport function withMethods<Methods, Input>(methodCreator: (input: Input) => Methods): Feature<Input, Methods & Input> {\n return (input) => ({ ...methodCreator(input), ...input });\n}\n","import type { Feature, HttpDelegate, WebSocketDelegate } from '../../../types';\nimport { isHttpDelegate, isWebSocketDelegate, wrapHttpDelegate, wrapWebSocketDelegate } from '../../../utils';\n\ntype Environments = Record<string, string>;\n\ninterface EnvironmentsConfig<Input, Environment extends Environments = Environments> {\n name: keyof Input;\n environments: Environment;\n default?: keyof Environment;\n fallback?: keyof Environment;\n}\n\ninterface EnvironmentManager<Environment extends Environments> {\n getCurrentEnvironment(): keyof Environment;\n setEnvironment(env: keyof Environment): void;\n getBaseURL(): string;\n}\n\nfunction createEnvironmentManager<Input, Environment extends Environments>(config: EnvironmentsConfig<Input, Environment>): EnvironmentManager<Environment> {\n const environmentKeys = Object.keys(config.environments);\n const defaultKey = config.default || environmentKeys[0];\n let currentEnv = defaultKey;\n\n function getCurrentEnvironment(): keyof Environment {\n return currentEnv;\n }\n\n function setEnvironment(env: string): void {\n if (!config.environments[env]) {\n const fallback = config.fallback || defaultKey;\n console.warn(`[ENVIRONMENTS] Environment \"${env}\" not found, falling back to \"${String(fallback)}\"`);\n currentEnv = fallback;\n } else {\n currentEnv = env;\n console.info(`[ENVIRONMENTS] Switched to environment: ${env} (${config.environments[env]})`);\n }\n }\n\n function getBaseURL() {\n return config.environments[currentEnv] || config.environments[Object.keys(config.environments)[0]];\n }\n\n return {\n getCurrentEnvironment,\n setEnvironment,\n getBaseURL,\n };\n}\n\nfunction wrapHttpDelegateWithEnvironments<Environment extends Environments>(delegate: HttpDelegate, envManager: EnvironmentManager<Environment>): HttpDelegate {\n const buildFullURL = (url: string) => {\n const baseURL = envManager.getBaseURL();\n if (url.startsWith('http')) {\n return url;\n }\n\n const cleanBaseURL = baseURL.replace(/\\/$/, '');\n const cleanPath = url.startsWith('/') ? url : `/${url}`;\n const fullURL = `${cleanBaseURL}${cleanPath}`;\n console.info(`[ENVIRONMENTS] Building URL: ${cleanBaseURL} + ${cleanPath} = ${fullURL}`);\n return fullURL;\n };\n\n return wrapHttpDelegate(delegate, {\n before: (context) => {\n return { url: buildFullURL(context.url) };\n },\n });\n}\n\nfunction wrapWebSocketDelegateWithEnvironments<Environment extends Environments>(delegate: WebSocketDelegate, envManager: EnvironmentManager<Environment>): WebSocketDelegate {\n return wrapWebSocketDelegate(delegate, {\n beforeConnect: () => {\n console.info(`[ENVIRONMENTS] WebSocket connecting to: ${envManager.getBaseURL()}`);\n },\n });\n}\n\nfunction wrapDelegateWithEnvironments<Environment extends Environments>(delegate: unknown, envManager: EnvironmentManager<Environment>): unknown {\n if (isHttpDelegate(delegate)) {\n return wrapHttpDelegateWithEnvironments(delegate, envManager);\n }\n\n if (isWebSocketDelegate(delegate)) {\n return wrapWebSocketDelegateWithEnvironments(delegate, envManager);\n }\n\n return delegate;\n}\n\nexport function withEnvironments<Input, Environment extends Environments>(config: EnvironmentsConfig<Input, Environment>): Feature<Input, Input & { environments: EnvironmentManager<Environment> }> {\n return (input: Input) => {\n const { name } = config;\n const environments = createEnvironmentManager(config);\n\n return {\n ...input,\n [name]: wrapDelegateWithEnvironments(input[name], environments),\n environments,\n };\n };\n}\n","import type { DelegateFeature } from '../../../types';\nimport { isHttpDelegate, wrapHttpDelegate } from '../../../utils';\nimport type { HttpInterceptor } from '../../../utils/delegate-middleware.utils';\n\nexport interface InterceptorConfig extends HttpInterceptor {\n name?: string;\n}\n\n/**\n * Add HTTP interceptor to the delegate.\n *\n * @param config - The interceptor configuration.\n * @returns A delegate feature that wraps the HTTP delegate with the interceptor.\n */\nexport function withInterceptor(config: InterceptorConfig): DelegateFeature {\n return ({ delegate, ...rest }) => {\n const { name: _name, ...interceptor } = config;\n\n if (isHttpDelegate(delegate)) {\n return {\n ...rest,\n delegate: wrapHttpDelegate(delegate, interceptor),\n };\n }\n\n return { ...rest, delegate };\n };\n}\n","import type { Delegate, DelegateFeature, HttpDelegate } from '../../../types';\nimport { isHttpDelegate } from '../../../utils';\n\ninterface OfflineConfig {\n /**\n * The strategy to use for the offline manager.\n * @default 'cache-first'\n */\n strategy?: 'cache-first' | 'network-first' | 'network-only';\n /**\n * The TTL for the cache in milliseconds.\n * @default 300000 (5 minutes)\n */\n cacheTTL?: number;\n}\n\ninterface CacheEntry<T = unknown> {\n data: T;\n timestamp: number;\n ttl: number;\n}\n\ninterface OfflineManager {\n isOnline(): boolean;\n clearCache(): void;\n getCacheSize(): number;\n}\n\ninterface ExtendedOfflineManager extends OfflineManager {\n getFromCache: <T>(key: string) => T | null;\n setInCache: <T>(key: string, data: T) => void;\n generateCacheKey: (method: string, url: string, body?: unknown) => string;\n}\n\nfunction isOnline(): boolean {\n return typeof navigator !== 'undefined' && navigator.onLine !== undefined ? navigator.onLine : true;\n}\n\nfunction createOfflineManager(config: OfflineConfig): ExtendedOfflineManager {\n const cache = new Map<string, CacheEntry>();\n const cacheTTL = config.cacheTTL ?? 300000;\n\n function generateCacheKey(method: string, url: string, body?: unknown): string {\n const bodyStr = body ? JSON.stringify(body) : '';\n return `${method}:${url}:${bodyStr}`;\n }\n\n function getFromCache<T>(cacheKey: string): T | null {\n const entry = cache.get(cacheKey);\n if (!entry) {\n return null;\n }\n\n if (Date.now() - entry.timestamp > entry.ttl) {\n cache.delete(cacheKey);\n return null;\n }\n\n return entry.data as T;\n }\n\n function setInCache<T>(cacheKey: string, data: T): void {\n cache.set(cacheKey, {\n data,\n timestamp: Date.now(),\n ttl: cacheTTL,\n });\n }\n\n return {\n isOnline,\n clearCache: () => cache.clear(),\n getCacheSize: () => cache.size,\n getFromCache: getFromCache,\n setInCache: setInCache,\n generateCacheKey: generateCacheKey,\n };\n}\n\nfunction wrapHttpDelegateWithOffline(delegate: HttpDelegate, offlineManager: ExtendedOfflineManager, config: OfflineConfig): HttpDelegate {\n const strategy = config.strategy ?? 'cache-first';\n\n const wrapMethod = <K extends keyof HttpDelegate>(methodName: K) => {\n const originalMethod = delegate[methodName];\n\n return async <T>(url: string, bodyOrOptions?: unknown, optionsArg?: unknown): Promise<T> => {\n // Handle overloaded signatures\n const isGetOrDelete = methodName === 'get' || methodName === 'delete';\n const body = isGetOrDelete ? undefined : bodyOrOptions;\n const options = isGetOrDelete ? bodyOrOptions : optionsArg;\n\n const cacheKey = offlineManager.generateCacheKey(String(methodName), url, body);\n\n if (strategy === 'cache-first') {\n const cached = offlineManager.getFromCache<T>(cacheKey);\n if (cached) {\n console.info(`[OFFLINE] Cache hit for ${methodName} ${url}`);\n return cached;\n }\n\n if (offlineManager.isOnline()) {\n try {\n const result = isGetOrDelete ? await (originalMethod as (url: string, options?: unknown) => Promise<T>)(url, options) : await (originalMethod as (url: string, body: unknown, options?: unknown) => Promise<T>)(url, body, options);\n offlineManager.setInCache(cacheKey, result);\n return result;\n } catch (error) {\n console.error(`[OFFLINE] Network error for ${methodName} ${url}:`, error);\n throw error;\n }\n }\n\n throw new Error(`[OFFLINE] No cache available and offline for ${methodName} ${url}`);\n }\n\n if (strategy === 'network-first') {\n if (offlineManager.isOnline()) {\n try {\n const result = isGetOrDelete ? await (originalMethod as (url: string, options?: unknown) => Promise<T>)(url, options) : await (originalMethod as (url: string, body: unknown, options?: unknown) => Promise<T>)(url, body, options);\n offlineManager.setInCache(cacheKey, result);\n return result;\n } catch (error) {\n const cached = offlineManager.getFromCache<T>(cacheKey);\n if (cached) {\n console.warn(`[OFFLINE] Network failed, using cache for ${methodName} ${url}`);\n return cached;\n }\n throw error;\n }\n }\n\n const cached = offlineManager.getFromCache<T>(cacheKey);\n if (cached) {\n return cached;\n }\n throw new Error(`[OFFLINE] Offline and no cache for ${methodName} ${url}`);\n }\n\n if (strategy === 'network-only') {\n if (!offlineManager.isOnline()) {\n throw new Error(`[OFFLINE] Network unavailable for ${methodName} ${url}`);\n }\n return isGetOrDelete ? await (originalMethod as (url: string, options?: unknown) => Promise<T>)(url, options) : await (originalMethod as (url: string, body: unknown, options?: unknown) => Promise<T>)(url, body, options);\n }\n\n throw new Error(`[OFFLINE] Unknown strategy: ${strategy}`);\n };\n };\n\n return {\n get: wrapMethod('get'),\n post: wrapMethod('post'),\n patch: wrapMethod('patch'),\n put: wrapMethod('put'),\n delete: wrapMethod('delete'),\n };\n}\n\nfunction wrapDelegateWithOffline(delegate: Delegate, offlineManager: ExtendedOfflineManager, config: OfflineConfig): Delegate {\n if (isHttpDelegate(delegate)) {\n return wrapHttpDelegateWithOffline(delegate, offlineManager, config);\n }\n\n return delegate;\n}\n\nexport function withOffline(config: OfflineConfig = {}): DelegateFeature<{ offline: OfflineManager }> {\n return ({ delegate, ...rest }) => {\n const offlineManager = createOfflineManager(config);\n\n return {\n ...rest,\n delegate: wrapDelegateWithOffline(delegate, offlineManager, config),\n offline: offlineManager,\n };\n };\n}\n","import type { Delegate, DelegateFeature, WebSocketDelegate } from '../../../types';\nimport { type HttpInterceptor, isHttpDelegate, isWebSocketDelegate, type ResponseInterceptorContext, wrapHttpDelegate } from '../../../utils';\n\ninterface TelemetryEvent {\n timestamp: number;\n type: 'request' | 'response' | 'error';\n operation: string;\n duration?: number;\n status?: number;\n error?: Error;\n traceId?: string;\n}\n\ninterface TelemetryMetrics {\n requests: { total: number; success: number; errors: number };\n latency: { avg: number; min: number; max: number };\n}\n\ninterface TelemetryCollector {\n recordEvent: (event: TelemetryEvent) => void;\n generateTraceId: () => string | undefined;\n getMetrics: () => TelemetryMetrics;\n}\n\ninterface TelemetryOptions {\n enableMetrics?: boolean;\n enableTracing?: boolean;\n enableLogging?: boolean;\n onEvent?: (event: TelemetryEvent) => void;\n onMetrics?: (metrics: TelemetryMetrics) => void;\n}\n\nfunction createTelemetryCollector({ enableMetrics = false, enableTracing = false, enableLogging = false, onEvent = () => {}, onMetrics = () => {} }: TelemetryOptions): TelemetryCollector {\n const events: TelemetryEvent[] = [];\n const metrics: TelemetryMetrics = {\n requests: { total: 0, success: 0, errors: 0 },\n latency: { avg: 0, min: Number.MAX_SAFE_INTEGER, max: Number.MIN_SAFE_INTEGER },\n };\n\n function recordEvent(event: TelemetryEvent): void {\n events.push(event);\n updateMetrics(event);\n\n if (enableLogging) {\n logEvent(event);\n }\n\n onEvent(event);\n }\n\n function generateTraceId(): string | undefined {\n return enableTracing ? Math.random().toString(36).substring(2, 15) : undefined;\n }\n\n function getMetrics(): TelemetryMetrics {\n return {\n requests: enableMetrics ? metrics.requests : { total: 0, success: 0, errors: 0 },\n latency: enableMetrics ? metrics.latency : { avg: 0, min: 0, max: 0 },\n };\n }\n\n function updateMetrics(event: TelemetryEvent): void {\n if (!enableMetrics) {\n return;\n }\n\n switch (event.type) {\n case 'request':\n metrics.requests.total++;\n break;\n\n case 'response':\n metrics.requests.success++;\n if (event.duration) {\n updateLatency(event.duration);\n }\n break;\n\n case 'error':\n metrics.requests.errors++;\n if (event.duration) {\n updateLatency(event.duration);\n }\n break;\n }\n\n onMetrics(metrics);\n }\n\n function updateLatency(_duration: number): void {\n const latencies = events\n .filter((event): event is TelemetryEvent & { duration: number } => event.duration !== undefined)\n .map((event) => event.duration)\n .filter((d) => d > 0);\n\n if (latencies.length > 0) {\n metrics.latency.avg = latencies.reduce((sum, lat) => sum + lat, 0) / latencies.length;\n metrics.latency.min = Math.min(...latencies);\n metrics.latency.max = Math.max(...latencies);\n }\n }\n\n function logEvent(event: TelemetryEvent): void {\n const logLevel = event.type === 'error' ? 'error' : 'info';\n const message = `[TELEMETRY] ${event.operation} ${event.duration ? `(${event.duration}ms)` : ''}`;\n\n if (event.type === 'error' && event.error) {\n console[logLevel](message, event.error);\n } else {\n console[logLevel](message);\n }\n }\n\n return {\n recordEvent,\n generateTraceId,\n getMetrics,\n };\n}\n\nfunction createTelemetryHttpInterceptor(collector: TelemetryCollector): HttpInterceptor {\n const startTimes = new Map<string, { time: number; traceId: string | undefined }>();\n\n return {\n before: (context: { method: string; url: string }) => {\n const traceId = collector.generateTraceId();\n const operation = `${context.method.toUpperCase()} ${context.url}`;\n const startTime = Date.now();\n\n startTimes.set(operation, { time: startTime, traceId });\n\n collector.recordEvent({\n timestamp: startTime,\n type: 'request',\n operation,\n traceId,\n });\n\n return undefined;\n },\n after: <T>(context: ResponseInterceptorContext<T>) => {\n const operation = `${context.method.toUpperCase()} ${context.url}`;\n const startData = startTimes.get(operation);\n\n if (startData) {\n const duration = Date.now() - startData.time;\n\n collector.recordEvent({\n timestamp: Date.now(),\n type: 'response',\n operation,\n duration,\n status: 200,\n traceId: startData.traceId,\n });\n\n startTimes.delete(operation);\n }\n\n return context.response;\n },\n error: (method: string, url: string, error: Error) => {\n const operation = `${method.toUpperCase()} ${url}`;\n const startData = startTimes.get(operation);\n\n if (startData) {\n const duration = Date.now() - startData.time;\n\n collector.recordEvent({\n timestamp: Date.now(),\n type: 'error',\n operation,\n duration,\n error,\n traceId: startData.traceId,\n });\n\n startTimes.delete(operation);\n }\n },\n } as HttpInterceptor;\n}\n\nfunction wrapWebSocketDelegateWithTelemetry(delegate: WebSocketDelegate, collector: TelemetryCollector): WebSocketDelegate {\n const createTimedOperation = (operation: string) => {\n const traceId = collector.generateTraceId();\n const startTime = Date.now();\n\n collector.recordEvent({\n timestamp: startTime,\n type: 'request',\n operation,\n traceId,\n });\n\n return {\n success: () => {\n const duration = Date.now() - startTime;\n collector.recordEvent({\n timestamp: Date.now(),\n type: 'response',\n operation,\n duration,\n status: 200,\n traceId,\n });\n },\n error: (error: Error) => {\n const duration = Date.now() - startTime;\n collector.recordEvent({\n timestamp: Date.now(),\n type: 'error',\n operation,\n duration,\n error,\n traceId,\n });\n },\n };\n };\n\n return {\n ...delegate,\n connect: () => {\n const op = createTimedOperation('connect');\n try {\n delegate.connect();\n op.success();\n } catch (error) {\n op.error(error as Error);\n throw error;\n }\n },\n send: (message: unknown) => {\n const op = createTimedOperation('send');\n try {\n delegate.send(message);\n op.success();\n } catch (error) {\n op.error(error as Error);\n throw error;\n }\n },\n close: () => {\n const op = createTimedOperation('close');\n try {\n delegate.close();\n op.success();\n } catch (error) {\n op.error(error as Error);\n throw error;\n }\n },\n onMessage: (callback: (data: unknown) => void) => {\n const op = createTimedOperation('onMessage');\n try {\n const result = delegate.onMessage(callback);\n op.success();\n return result;\n } catch (error) {\n op.error(error as Error);\n throw error;\n }\n },\n onError: (callback: (event: Event) => void) => {\n return delegate.onError((event: Event) => {\n const op = createTimedOperation('onError');\n op.error(new Error('WebSocket error'));\n callback(event);\n });\n },\n };\n}\n\nfunction wrapDelegateWithTelemetry(delegate: Delegate, collector: TelemetryCollector): Delegate {\n if (isHttpDelegate(delegate)) {\n return wrapHttpDelegate(delegate, createTelemetryHttpInterceptor(collector));\n }\n\n if (isWebSocketDelegate(delegate)) {\n return wrapWebSocketDelegateWithTelemetry(delegate, collector);\n }\n\n return delegate;\n}\n\nexport function withTelemetry(options: TelemetryOptions = {}): DelegateFeature<{ telemetry: TelemetryCollector }> {\n return ({ delegate, ...rest }) => {\n const telemetryCollector = createTelemetryCollector(options);\n\n return {\n ...rest,\n delegate: wrapDelegateWithTelemetry(delegate, telemetryCollector),\n telemetry: telemetryCollector,\n };\n };\n}\n","import type { Feature } from './types';\n\ntype Merge<A, B> = Omit<A, keyof B> & B;\n\n/**\n * Creates a universal client that combines multiple features.\n *\n * @param features - The features to be used in the client.\n * @returns A universal client that combines multiple features.\n */\nexport function universalClient<A>(featureA: Feature<unknown, A>): A;\nexport function universalClient<A, B>(featureA: Feature<unknown, A>, featureB: Feature<A, B>): Merge<A, B>;\nexport function universalClient<A, B, C>(featureA: Feature<unknown, A>, featureB: Feature<A, B>, featureC: Feature<Merge<A, B>, C>): Merge<Merge<A, B>, C>;\nexport function universalClient<A, B, C, D>(featureA: Feature<unknown, A>, featureB: Feature<A, B>, featureC: Feature<Merge<A, B>, C>, featureD: Feature<Merge<Merge<A, B>, C>, D>): Merge<Merge<Merge<A, B>, C>, D>;\nexport function universalClient<A, B, C, D, E>(\n featureA: Feature<unknown, A>,\n featureB: Feature<A, B>,\n featureC: Feature<Merge<A, B>, C>,\n featureD: Feature<Merge<Merge<A, B>, C>, D>,\n featureE: Feature<Merge<Merge<Merge<A, B>, C>, D>, E>,\n): Merge<Merge<Merge<Merge<A, B>, C>, D>, E>;\nexport function universalClient<A, B, C, D, E, F>(\n featureA: Feature<unknown, A>,\n featureB: Feature<A, B>,\n featureC: Feature<Merge<A, B>, C>,\n featureD: Feature<Merge<Merge<A, B>, C>, D>,\n featureE: Feature<Merge<Merge<Merge<A, B>, C>, D>, E>,\n featureF: Feature<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>,\n): Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>;\nexport function universalClient<A, B, C, D, E, F, G>(\n featureA: Feature<unknown, A>,\n featureB: Feature<A, B>,\n featureC: Feature<Merge<A, B>, C>,\n featureD: Feature<Merge<Merge<A, B>, C>, D>,\n featureE: Feature<Merge<Merge<Merge<A, B>, C>, D>, E>,\n featureF: Feature<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>,\n featureG: Feature<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>,\n): Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>;\nexport function universalClient<A, B, C, D, E, F, G, H>(\n featureA: Feature<unknown, A>,\n featureB: Feature<A, B>,\n featureC: Feature<Merge<A, B>, C>,\n featureD: Feature<Merge<Merge<A, B>, C>, D>,\n featureE: Feature<Merge<Merge<Merge<A, B>, C>, D>, E>,\n featureF: Feature<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>,\n featureG: Feature<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>,\n featureH: Feature<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>,\n): Merge<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>;\nexport function universalClient<A, B, C, D, E, F, G, H, I>(\n featureA: Feature<unknown, A>,\n featureB: Feature<A, B>,\n featureC: Feature<Merge<A, B>, C>,\n featureD: Feature<Merge<Merge<A, B>, C>, D>,\n featureE: Feature<Merge<Merge<Merge<A, B>, C>, D>, E>,\n featureF: Feature<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>,\n featureG: Feature<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>,\n featureH: Feature<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>,\n featureI: Feature<Merge<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>, I>,\n): Merge<Merge<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>, I>;\nexport function universalClient<A, B, C, D, E, F, G, H, I, J>(\n featureA: Feature<unknown, A>,\n featureB: Feature<A, B>,\n featureC: Feature<Merge<A, B>, C>,\n featureD: Feature<Merge<Merge<A, B>, C>, D>,\n featureE: Feature<Merge<Merge<Merge<A, B>, C>, D>, E>,\n featureF: Feature<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>,\n featureG: Feature<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>,\n featureH: Feature<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>,\n featureI: Feature<Merge<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>, I>,\n featureJ: Feature<Merge<Merge<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>, I>, J>,\n): Merge<Merge<Merge<Merge<Merge<Merge<Merge<Merge<Merge<A, B>, C>, D>, E>, F>, G>, H>, I>, J>;\nexport function universalClient(...withFeatures: Feature<unknown, unknown>[]): unknown;\nexport function universalClient(...withFeatures: Feature<unknown, unknown>[]) {\n // biome-ignore lint/performance/noAccumulatingSpread: needed for typescript\n const client = withFeatures.reduce((accumulator, feature) => Object.assign(accumulator, feature(accumulator)), {});\n\n // Extract onInit hook if present\n const { onInit, ...rest } = client as Record<string, unknown>;\n\n // Call onInit hook if it exists\n if (typeof onInit === 'function') {\n onInit(rest);\n }\n\n return rest;\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "universal-client",
3
3
  "description": "Universal client for web applications",
4
- "version": "0.0.11",
4
+ "version": "0.0.12",
5
5
  "keywords": [
6
6
  "api",
7
7
  "client",