universal-client 0.1.1 → 0.1.2

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.1.1
2
+ * universal-client v0.1.2
3
3
  * (c) 2026 Kevin Bonnoron
4
4
  * @license MIT
5
5
  */
6
- var G=Object.defineProperty;var T=(t,e)=>()=>(t&&(e=t(t=0)),e);var A=(t,e)=>{for(var o in e)G(t,o,{get:e[o],enumerable:true});};var B={};A(B,{createAxiosDelegate:()=>z});async function z(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 o=e.default,{baseURL:n,...r}=t,s=o.create({baseURL:n,...r});return {get(a,u){return s.get(a,{headers:u?.headers}).then(l=>l.data)},post(a,u,l){return s.post(a,u,{headers:l?.headers}).then(m=>m.data)},patch(a,u,l){return s.patch(a,u,{headers:l?.headers}).then(m=>m.data)},put(a,u,l){return s.put(a,u,{headers:l?.headers}).then(m=>m.data)},delete(a,u){return s.delete(a,{headers:u?.headers}).then(l=>l.data)}}}var H=T(()=>{});var I={};A(I,{createBetterFetchDelegate:()=>_});async function _(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:o}=e,{baseURL:n,...r}=t,s=o({baseURL:n,...r});return {get(a,u){return s(a,{headers:u?.headers}).then(l=>l.data)},post(a,u,l){return s(a,{method:"POST",body:u,headers:l?.headers}).then(m=>m.data)},patch(a,u,l){return s(a,{method:"PATCH",body:u,headers:l?.headers}).then(m=>m.data)},put(a,u,l){return s(a,{method:"PUT",body:u,headers:l?.headers}).then(m=>m.data)},delete(a,u){return s(a,{method:"DELETE",headers:u?.headers}).then(l=>l.data)}}}var L=T(()=>{});function j(t){let e=t.headers.get("Content-Type")??"";return e.includes("application/json")?"json":e.startsWith("text/")||e.includes("application/xml")||e.includes("application/javascript")?"text":e.startsWith("image/")||e.startsWith("audio/")||e.startsWith("video/")||e.startsWith("application/")?"blob":"raw"}function J(t){return async e=>{if(!e.ok){let n=`HTTP ${e.status}: ${e.statusText}`;try{let r=await e.clone().json();r.error?n=r.error:r.message&&(n=r.message);}catch{}throw new Error(n)}let o=t??j(e);return o==="json"?e.json():o==="text"?e.text():o==="blob"?e.blob():e}}function K(t){let e=new URLSearchParams;for(let[o,n]of Object.entries(t??{}))if(n!=null)if(n instanceof Date)e.append(o,n.toISOString());else if(Array.isArray(n))for(let r of n)e.append(`${o}[]`,r?.toString()??"");else e.append(o,n.toString());return e.size?`?${e}`:""}function R({baseURL:t}){function e(o,n,r,{params:s={},headers:a={},format:u,signal:l}={}){let m={method:o,headers:{...a}};return l&&(m.signal=l),r!=null&&(r instanceof FormData||r instanceof Blob||r instanceof ArrayBuffer||r instanceof URLSearchParams||r instanceof ReadableStream||typeof r=="string"?m.body=r:(m.body=JSON.stringify(r),m.headers["Content-Type"]??="application/json")),fetch(`${t}${n}${K(s)}`,m).then(J(u))}return {get(o,n){return e("GET",o,void 0,n)},post(o,n,r){return e("POST",o,n,r)},patch(o,n,r){return e("PATCH",o,n,r)},put(o,n,r){return e("PUT",o,n,r)},delete(o,n){return e("DELETE",o,void 0,n)}}}async function P(t){if(t.impl==="axios"){let{createAxiosDelegate:e}=await Promise.resolve().then(()=>(H(),B));return e(t)}if(t.impl==="better-fetch"){let{createBetterFetchDelegate:e}=await Promise.resolve().then(()=>(L(),I));return e(t)}return R(t)}async function W({baseURL:t}){let e=new Set,o=new Set,n=new Set,r=new Map,s=null,a=null;function u(){s&&(s.close(),s=null),a&&(a.abort(),a=null);}function l(g,d){let f=d.join(`
7
- `);if(g===""||g==="message")for(let i of o)i(f);if(g!==""&&g!=="message"){let i=r.get(g);if(i)for(let c of i)c(f);}}async function m(g){let d=g.getReader(),f=new TextDecoder,i="",c="",p=[];try{for(;;){let{done:D,value:w}=await d.read();if(D){p.length>0&&l(c,p);break}i+=f.decode(w,{stream:!0});let S=i.split(`
8
- `);i=S.pop()??"";for(let O of S){let h=O.endsWith("\r")?O.slice(0,-1):O;if(h===""){p.length>0&&(l(c,p),c="",p=[]);continue}if(h.startsWith(":"))continue;let F=h.indexOf(":"),x,b;switch(F===-1?(x=h,b=""):(x=h.slice(0,F),b=h[F+1]===" "?h.slice(F+2):h.slice(F+1)),x){case "data":p.push(b);break;case "event":c=b;break}}}}catch(D){if(D instanceof DOMException&&D.name==="AbortError")return;let w=new Event("error");for(let S of n)S(w);}}return {open(g){u();let d=g?.url??t,f=g?.method??"GET";if(f==="GET"){if(typeof EventSource>"u")throw new Error("EventSource is not available. This delegate only works in browser environments.");s=new EventSource(d),s.addEventListener("open",i=>{for(let c of e)c(i);}),s.addEventListener("error",i=>{for(let c of n)c(i);}),s.addEventListener("message",i=>{for(let c of o)c(i.data);});for(let[i,c]of r)for(let p of c){let D=w=>p(w.data);s.addEventListener(i,D);}}else {a=new AbortController;let i={method:f,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(d,i).then(c=>{if(!c.ok){let D=new Event("error");for(let w of n)w(D);return}if(!c.body){let D=new Event("error");for(let w of n)w(D);return}let p=new Event("open");for(let D of e)D(p);m(c.body);}).catch(c=>{if(c instanceof DOMException&&c.name==="AbortError")return;let p=new Event("error");for(let D of n)D(p);});}},close(){u();},onOpen(g){return e.add(g),()=>e.delete(g)},onError(g){return n.add(g),()=>n.delete(g)},onMessage(g){return o.add(g),()=>o.delete(g)},subscribe(g,d){let f=r.get(g);if(f||(f=new Set,r.set(g,f)),f.add(d),s){let i=c=>d(c.data);return s.addEventListener(g,i),()=>{f.delete(d),s&&s.removeEventListener(g,i);}}return ()=>{f.delete(d);}}}}function N({baseURL:t,protocols:e,reconnectInterval:o=5e3,maxReconnectAttempts:n=10}){let r=null,s=null,a=0,u=new Set,l=new Set,m=new Set,g=new Set;function d(){s!==null||a>=n||(a++,s=window.setTimeout(()=>{s=null,f.connect();},o));}let f={connect:()=>{r&&r.close(),r=new WebSocket(t,e),r.onopen=i=>{a=0;for(let c of u)c(i);},r.onclose=i=>{for(let c of m)c(i);d();},r.onerror=i=>{for(let c of g)c(i);},r.onmessage=i=>{let c;try{c=JSON.parse(i.data);}catch{c=i.data;}for(let p of l)p(c);};},close(){r&&(r.close(),r=null),s!==null&&(window.clearTimeout(s),s=null);},send(i){r&&r.readyState===WebSocket.OPEN?r.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 f.connect(),f}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 k(t){return typeof t=="object"&&t!==null&&"connect"in t&&"send"in t&&"close"in t}function $(t){return typeof t=="object"&&t!==null&&"open"in t&&"onMessage"in t&&"onError"in t&&"onOpen"in t&&"subscribe"in t}var V=t=>typeof t=="object"&&t!==null&&"type"in t;function q(t){if(V(t)){if(t.type==="http")return X(t);if(t.type==="websocket")return N(t);if(t.type==="server-sent-event")return Y(t);throw new Error("Unsupported delegate type")}return t}function X(t){let e=null,o=()=>(e||(e=P(t)),e);return {async get(n,r){return (await o()).get(n,r)},async post(n,r,s){return (await o()).post(n,r,s)},async patch(n,r,s){return (await o()).patch(n,r,s)},async put(n,r,s){return (await o()).put(n,r,s)},async delete(n,r){return (await o()).delete(n,r)}}}function Y(t){let e=null,o=()=>(e||(e=W(t)),e);return {open(n){o().then(r=>r.open(n)).catch(r=>console.error("[SSE] Failed to open connection:",r));},close(){e&&e.then(n=>n.close()).catch(console.error);},onOpen(n){let r=null;return o().then(s=>{r=s.onOpen(n);}).catch(s=>console.error("[SSE] Failed to attach onOpen handler:",s)),()=>{r&&r();}},onError(n){let r=null;return o().then(s=>{r=s.onError(n);}).catch(s=>console.error("[SSE] Failed to attach onError handler:",s)),()=>{r&&r();}},onMessage(n){let r=null;return o().then(s=>{r=s.onMessage(n);}).catch(s=>console.error("[SSE] Failed to attach onMessage handler:",s)),()=>{r&&r();}},subscribe(n,r){let s=null;return o().then(a=>{s=a.subscribe(n,r);}).catch(a=>console.error(`[SSE] Failed to subscribe to event "${n}":`,a)),()=>{s&&s();}}}}function y(t,e){let o=n=>{let r=t[n];return async(s,a,u)=>{let l=n==="get"||n==="delete",m=l?void 0:a,g=l?a:u,d={method:n,url:s,headers:g?.headers??{},body:m};try{if(e.onBeforeRequest){let c=await e.onBeforeRequest(d);c&&typeof c=="object"&&(d={...d,...c});}let f={...g,headers:d.headers},i=l?await r(d.url,f):await r(d.url,d.body,f);if(e.onAfterResponse){let c=await e.onAfterResponse({method:n,url:d.url,response:i});c&&typeof c=="object"&&(i={...i,...c});}return i}catch(f){throw e.onError&&await e.onError(n,d.url,f,d.body),f}}};return {get:o("get"),post:o("post"),patch:o("patch"),put:o("put"),delete:o("delete")}}function C(t,e){return {...t,connect:()=>{e.onBeforeConnect&&Promise.resolve(e.onBeforeConnect()).catch(console.error),t.connect(),e.onAfterConnect&&Promise.resolve(e.onAfterConnect()).catch(console.error);},send:o=>{e.onBeforeSend&&Promise.resolve(e.onBeforeSend(o)).catch(console.error),t.send(o),e.onAfterSend&&Promise.resolve(e.onAfterSend(o)).catch(console.error);},close:()=>{e.onBeforeClose&&Promise.resolve(e.onBeforeClose()).catch(console.error),t.close(),e.onAfterClose&&Promise.resolve(e.onAfterClose()).catch(console.error);}}}function U(t,e){return {...t,open:async o=>{let n=o;if(e.onBeforeOpen){let r=await e.onBeforeOpen(n);r&&typeof r=="object"&&(n={...n,...r});}t.open(n),e.onAfterOpen&&Promise.resolve(e.onAfterOpen(n)).catch(console.error);},close:()=>{e.onBeforeClose&&Promise.resolve(e.onBeforeClose()).catch(console.error),t.close(),e.onAfterClose&&Promise.resolve(e.onAfterClose()).catch(console.error);},onError:o=>t.onError(n=>{e.onError&&Promise.resolve(e.onError(new Error(n.type))).catch(console.error),o(n);}),onMessage:o=>t.onMessage(n=>{e.onMessage&&Promise.resolve(e.onMessage(n)).catch(console.error),o(n);})}}function E(t,...e){return o=>{let{delegate:n,...r}=e.reduce((a,u)=>{let l=u(a);return Object.assign({},a,l)},{...o,delegate:q(t)});return {[t.name??"delegate"]:n,...r}}}function Oe(t,...e){return E(t,...e)}function M(t,e){return typeof t=="string"?{options:{name:t},allFeatures:e}:typeof t=="function"?{options:{},allFeatures:[t,...e]}:t!==void 0?{options:t,allFeatures:e}:{options:{},allFeatures:e}}function xe(t,e,...o){return E({...e,baseURL:t,type:"http"},...o)}function Te(t,e,...o){let{options:n,allFeatures:r}=M(e,o);return E({...n,baseURL:t,type:"http"},...r)}function Ae(t,e,...o){let{options:n,allFeatures:r}=M(e,o);return E({...n,baseURL:t,type:"http",impl:"axios"},...r)}function Re(t,e,...o){let{options:n,allFeatures:r}=M(e,o);return E({...n,baseURL:t,type:"http",impl:"better-fetch"},...r)}function Be(t,e,...o){let{options:n,allFeatures:r}=M(e,o);return E({...n,baseURL:t,type:"server-sent-event"},...r)}function He(t,e,...o){let{options:n,allFeatures:r}=M(e,o);return E({...n,baseURL:t,type:"websocket"},...r)}function Le(t){return ()=>({...t})}function We(t){return e=>({...t(e),...e})}function Q(t){let e=Object.keys(t.environments),o=t.default||e[0],n=o;function r(){return n}function s(u){if(t.environments[u])n=u,console.info(`[ENVIRONMENTS] Switched to environment: ${u} (${t.environments[u]})`);else {let l=t.fallback||o;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:r,setEnvironment:s,getBaseURL:a}}function Z(t,e){let o=n=>{let r=e.getBaseURL();if(n.startsWith("http"))return n;let s=r.replace(/\/$/,""),a=n.startsWith("/")?n:`/${n}`,u=`${s}${a}`;return console.info(`[ENVIRONMENTS] Building URL: ${s} + ${a} = ${u}`),u};return y(t,{onBeforeRequest:n=>({url:o(n.url)})})}function ee(t,e){return C(t,{onBeforeConnect:()=>{console.info(`[ENVIRONMENTS] WebSocket connecting to: ${e.getBaseURL()}`);}})}function te(t,e){return v(t)?Z(t,e):k(t)?ee(t,e):t}function qe(t){return e=>{let{name:o}=t,n=Q(t);return {...e,[o]:te(e[o],n),environments:n}}}function je(t){return ({delegate:e,...o})=>v(e)?{...o,delegate:y(e,t)}:$(e)?{...o,delegate:U(e,t)}:k(e)?{...o,delegate:C(e,t)}:{...o,delegate:e}}function ne(){return typeof navigator<"u"&&navigator.onLine!==void 0?navigator.onLine:true}function re(t){let e=new Map,o=t.cacheTTL??3e5;function n(a,u,l){let m=l?JSON.stringify(l):"";return `${a}:${u}:${m}`}function r(a){let u=e.get(a);return u?Date.now()-u.timestamp>u.ttl?(e.delete(a),null):u.data:null}function s(a,u){e.set(a,{data:u,timestamp:Date.now(),ttl:o});}return {isOnline:ne,clearCache:()=>e.clear(),getCacheSize:()=>e.size,getFromCache:r,setInCache:s,generateCacheKey:n}}function oe(t,e,o){let n=o.strategy??"cache-first",r=s=>{let a=t[s];return async(u,l,m)=>{let g=s==="get"||s==="delete",d=g?void 0:l,f=g?l:m,i=e.generateCacheKey(String(s),u,d);if(n==="cache-first"){let c=e.getFromCache(i);if(c)return console.info(`[OFFLINE] Cache hit for ${s} ${u}`),c;if(e.isOnline())try{let p=g?await a(u,f):await a(u,d,f);return e.setInCache(i,p),p}catch(p){throw console.error(`[OFFLINE] Network error for ${s} ${u}:`,p),p}throw new Error(`[OFFLINE] No cache available and offline for ${s} ${u}`)}if(n==="network-first"){if(e.isOnline())try{let p=g?await a(u,f):await a(u,d,f);return e.setInCache(i,p),p}catch(p){let D=e.getFromCache(i);if(D)return console.warn(`[OFFLINE] Network failed, using cache for ${s} ${u}`),D;throw p}let c=e.getFromCache(i);if(c)return c;throw new Error(`[OFFLINE] Offline and no cache for ${s} ${u}`)}if(n==="network-only"){if(!e.isOnline())throw new Error(`[OFFLINE] Network unavailable for ${s} ${u}`);return g?await a(u,f):await a(u,d,f)}throw new Error(`[OFFLINE] Unknown strategy: ${n}`)}};return {get:r("get"),post:r("post"),patch:r("patch"),put:r("put"),delete:r("delete")}}function se(t,e,o){return v(t)?oe(t,e,o):t}function ze(t={}){return ({delegate:e,...o})=>{let n=re(t);return {...o,delegate:se(e,n,t),offline:n}}}function ae({enableMetrics:t=false,enableTracing:e=false,enableLogging:o=false,onEvent:n=()=>{},onMetrics:r=()=>{}}){let s=[],a={requests:{total:0,success:0,errors:0},latency:{avg:0,min:Number.MAX_SAFE_INTEGER,max:Number.MIN_SAFE_INTEGER}};function u(i){s.push(i),g(i),o&&f(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&&d(i.duration);break;case "error":a.requests.errors++,i.duration&&d(i.duration);break}r(a);}}function d(i){let c=s.filter(p=>p.duration!==void 0).map(p=>p.duration).filter(p=>p>0);c.length>0&&(a.latency.avg=c.reduce((p,D)=>p+D,0)/c.length,a.latency.min=Math.min(...c),a.latency.max=Math.max(...c));}function f(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 ie(t){let e=new Map;return {onBeforeRequest:o=>{let n=t.generateTraceId(),r=`${o.method.toUpperCase()} ${o.url}`,s=Date.now();e.set(r,{time:s,traceId:n}),t.recordEvent({timestamp:s,type:"request",operation:r,traceId:n});},onAfterResponse:o=>{let n=`${o.method.toUpperCase()} ${o.url}`,r=e.get(n);if(r){let s=Date.now()-r.time;t.recordEvent({timestamp:Date.now(),type:"response",operation:n,duration:s,status:200,traceId:r.traceId}),e.delete(n);}return o.response},onError:(o,n,r)=>{let s=`${o.toUpperCase()} ${n}`,a=e.get(s);if(a){let u=Date.now()-a.time;t.recordEvent({timestamp:Date.now(),type:"error",operation:s,duration:u,error:r,traceId:a.traceId}),e.delete(s);}}}}function ue(t,e){let o=n=>{let r=e.generateTraceId(),s=Date.now();return e.recordEvent({timestamp:s,type:"request",operation:n,traceId:r}),{success:()=>{let a=Date.now()-s;e.recordEvent({timestamp:Date.now(),type:"response",operation:n,duration:a,status:200,traceId:r});},error:a=>{let u=Date.now()-s;e.recordEvent({timestamp:Date.now(),type:"error",operation:n,duration:u,error:a,traceId:r});}}};return {...t,connect:()=>{let n=o("connect");try{t.connect(),n.success();}catch(r){throw n.error(r),r}},send:n=>{let r=o("send");try{t.send(n),r.success();}catch(s){throw r.error(s),s}},close:()=>{let n=o("close");try{t.close(),n.success();}catch(r){throw n.error(r),r}},onMessage:n=>{let r=o("onMessage");try{let s=t.onMessage(n);return r.success(),s}catch(s){throw r.error(s),s}},onError:n=>t.onError(r=>{o("onError").error(new Error("WebSocket error")),n(r);})}}function ce(t,e){return v(t)?y(t,ie(e)):k(t)?ue(t,e):t}function Xe(t={}){return ({delegate:e,...o})=>{let n=ae(t);return {...o,delegate:ce(e,n),telemetry:n}}}function gt(...t){let e=t.reduce((r,s)=>Object.assign(r,s(r)),{}),{onInit:o,...n}=e;return typeof o=="function"&&o(n),n}exports.universalClient=gt;exports.withAxiosDelegate=Ae;exports.withBetterFetchDelegate=Re;exports.withDelegate=Oe;exports.withEnvironments=qe;exports.withFetchDelegate=Te;exports.withHooks=Le;exports.withHttpDelegate=xe;exports.withInterceptor=je;exports.withMethods=We;exports.withOffline=ze;exports.withSseDelegate=Be;exports.withTelemetry=Xe;exports.withWebSocketDelegate=He;//# sourceMappingURL=index.js.map
6
+ var G=Object.defineProperty;var T=(t,e)=>()=>(t&&(e=t(t=0)),e);var A=(t,e)=>{for(var o in e)G(t,o,{get:e[o],enumerable:true});};var B={};A(B,{createAxiosDelegate:()=>z});async function z(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 o=e.default,{baseURL:n,...r}=t,s=o.create({baseURL:n,...r});return {get(a,i){return s.get(a,{headers:i?.headers}).then(c=>c.data)},post(a,i,c){return s.post(a,i,{headers:c?.headers}).then(m=>m.data)},patch(a,i,c){return s.patch(a,i,{headers:c?.headers}).then(m=>m.data)},put(a,i,c){return s.put(a,i,{headers:c?.headers}).then(m=>m.data)},delete(a,i){return s.delete(a,{headers:i?.headers}).then(c=>c.data)}}}var H=T(()=>{});var I={};A(I,{createBetterFetchDelegate:()=>_});async function _(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:o}=e,{baseURL:n,...r}=t,s=o({baseURL:n,...r});return {get(a,i){return s(a,{headers:i?.headers}).then(c=>c.data)},post(a,i,c){return s(a,{method:"POST",body:i,headers:c?.headers}).then(m=>m.data)},patch(a,i,c){return s(a,{method:"PATCH",body:i,headers:c?.headers}).then(m=>m.data)},put(a,i,c){return s(a,{method:"PUT",body:i,headers:c?.headers}).then(m=>m.data)},delete(a,i){return s(a,{method:"DELETE",headers:i?.headers}).then(c=>c.data)}}}var P=T(()=>{});function j(t){let e=t.headers.get("Content-Type")??"";return e.includes("application/json")?"json":e.startsWith("text/")||e.includes("application/xml")||e.includes("application/javascript")?"text":e.startsWith("image/")||e.startsWith("audio/")||e.startsWith("video/")||e.startsWith("application/")?"blob":"raw"}function J(t){return async e=>{if(!e.ok){let n=`HTTP ${e.status}: ${e.statusText}`;try{let r=await e.clone().json();r.error?n=r.error:r.message&&(n=r.message);}catch{}throw new Error(n)}let o=t??j(e);return o==="json"?e.json():o==="text"?e.text():o==="blob"?e.blob():e}}function K(t){let e=new URLSearchParams;for(let[o,n]of Object.entries(t??{}))if(n!=null)if(n instanceof Date)e.append(o,n.toISOString());else if(Array.isArray(n))for(let r of n)e.append(`${o}[]`,r?.toString()??"");else e.append(o,n.toString());return e.size?`?${e}`:""}function R({baseURL:t}){function e(o,n,r,{params:s={},headers:a={},format:i,signal:c}={}){let m={method:o,headers:{...a}};return c&&(m.signal=c),r!=null&&(r instanceof FormData||r instanceof Blob||r instanceof ArrayBuffer||r instanceof URLSearchParams||r instanceof ReadableStream||typeof r=="string"?m.body=r:(m.body=JSON.stringify(r),m.headers["Content-Type"]??="application/json")),fetch(`${t}${n}${K(s)}`,m).then(J(i))}return {get(o,n){return e("GET",o,void 0,n)},post(o,n,r){return e("POST",o,n,r)},patch(o,n,r){return e("PATCH",o,n,r)},put(o,n,r){return e("PUT",o,n,r)},delete(o,n){return e("DELETE",o,void 0,n)}}}async function L(t){if(t.impl==="axios"){let{createAxiosDelegate:e}=await Promise.resolve().then(()=>(H(),B));return e(t)}if(t.impl==="better-fetch"){let{createBetterFetchDelegate:e}=await Promise.resolve().then(()=>(P(),I));return e(t)}return R(t)}async function W({baseURL:t}){let e=new Set,o=new Set,n=new Set,r=new Map,s=null,a=null;function i(){s&&(s.close(),s=null),a&&(a.abort(),a=null);}function c(p,f){let d=f.join(`
7
+ `);if(p===""||p==="message")for(let u of o)u(d);if(p!==""&&p!=="message"){let u=r.get(p);if(u)for(let l of u)l(d);}}async function m(p){let f=p.getReader(),d=new TextDecoder,u="",l="",g=[];try{for(;;){let{done:D,value:h}=await f.read();if(D){g.length>0&&c(l,g);break}u+=d.decode(h,{stream:!0});let w=u.split(`
8
+ `);u=w.pop()??"";for(let v of w){let E=v.endsWith("\r")?v.slice(0,-1):v;if(E===""){g.length>0&&(c(l,g),l="",g=[]);continue}if(E.startsWith(":"))continue;let S=E.indexOf(":"),x,C;switch(S===-1?(x=E,C=""):(x=E.slice(0,S),C=E[S+1]===" "?E.slice(S+2):E.slice(S+1)),x){case "data":g.push(C);break;case "event":l=C;break}}}}catch(D){if(D instanceof DOMException&&D.name==="AbortError")return;let h=new Event("error");for(let w of n)w(h);}}return {open({url:p,method:f="GET",headers:d,body:u}={}){i();let l=p?`${t}${p}`:t;if(f==="GET"){if(typeof EventSource>"u")throw new Error("EventSource is not available. This delegate only works in browser environments.");s=new EventSource(l),s.addEventListener("open",g=>{for(let D of e)D(g);}),s.addEventListener("error",g=>{for(let D of n)D(g);}),s.addEventListener("message",g=>{for(let D of o)D(g.data);});for(let[g,D]of r)for(let h of D){let w=v=>h(v.data);s.addEventListener(g,w);}}else {a=new AbortController;let g={method:f,headers:{Accept:"text/event-stream","Content-Type":"application/json",...d},signal:a.signal};u!==void 0&&(g.body=JSON.stringify(u)),fetch(l,g).then(D=>{if(!D.ok){let w=new Event("error");for(let v of n)v(w);return}if(!D.body){let w=new Event("error");for(let v of n)v(w);return}let h=new Event("open");for(let w of e)w(h);m(D.body);}).catch(D=>{if(D instanceof DOMException&&D.name==="AbortError")return;let h=new Event("error");for(let w of n)w(h);});}},close(){i();},onOpen(p){return e.add(p),()=>e.delete(p)},onError(p){return n.add(p),()=>n.delete(p)},onMessage(p){return o.add(p),()=>o.delete(p)},subscribe(p,f){let d=r.get(p);if(d||(d=new Set,r.set(p,d)),d.add(f),s){let u=l=>f(l.data);return s.addEventListener(p,u),()=>{d.delete(f),s&&s.removeEventListener(p,u);}}return ()=>{d.delete(f);}}}}function N({baseURL:t,protocols:e,reconnectInterval:o=5e3,maxReconnectAttempts:n=10}){let r=null,s=null,a=0,i=new Set,c=new Set,m=new Set,p=new Set;function f(){s!==null||a>=n||(a++,s=window.setTimeout(()=>{s=null,d.connect();},o));}let d={connect:()=>{r&&r.close(),r=new WebSocket(t,e),r.onopen=u=>{a=0;for(let l of i)l(u);},r.onclose=u=>{for(let l of m)l(u);f();},r.onerror=u=>{for(let l of p)l(u);},r.onmessage=u=>{let l;try{l=JSON.parse(u.data);}catch{l=u.data;}for(let g of c)g(l);};},close(){r&&(r.close(),r=null),s!==null&&(window.clearTimeout(s),s=null);},send(u){r&&r.readyState===WebSocket.OPEN?r.send(JSON.stringify(u)):console.warn("WebSocket is not connected. Message not sent.");},onOpen(u){return i.add(u),()=>i.delete(u)},onClose(u){return m.add(u),()=>m.delete(u)},onError(u){return p.add(u),()=>p.delete(u)},onMessage(u){return c.add(u),()=>c.delete(u)}};return d.connect(),d}function k(t){return typeof t=="object"&&t!==null&&"get"in t&&"post"in t&&"patch"in t&&"put"in t&&"delete"in t}function F(t){return typeof t=="object"&&t!==null&&"connect"in t&&"send"in t&&"close"in t}function $(t){return typeof t=="object"&&t!==null&&"open"in t&&"onMessage"in t&&"onError"in t&&"onOpen"in t&&"subscribe"in t}var V=t=>typeof t=="object"&&t!==null&&"type"in t;function q(t){if(V(t)){if(t.type==="http")return X(t);if(t.type==="websocket")return N(t);if(t.type==="server-sent-event")return Y(t);throw new Error("Unsupported delegate type")}return t}function X(t){let e=null,o=()=>(e||(e=L(t)),e);return {async get(n,r){return (await o()).get(n,r)},async post(n,r,s){return (await o()).post(n,r,s)},async patch(n,r,s){return (await o()).patch(n,r,s)},async put(n,r,s){return (await o()).put(n,r,s)},async delete(n,r){return (await o()).delete(n,r)}}}function Y(t){let e=null,o=()=>(e||(e=W(t)),e);return {open(n){o().then(r=>r.open(n)).catch(r=>console.error("[SSE] Failed to open connection:",r));},close(){e&&e.then(n=>n.close()).catch(console.error);},onOpen(n){let r=null;return o().then(s=>{r=s.onOpen(n);}).catch(s=>console.error("[SSE] Failed to attach onOpen handler:",s)),()=>{r&&r();}},onError(n){let r=null;return o().then(s=>{r=s.onError(n);}).catch(s=>console.error("[SSE] Failed to attach onError handler:",s)),()=>{r&&r();}},onMessage(n){let r=null;return o().then(s=>{r=s.onMessage(n);}).catch(s=>console.error("[SSE] Failed to attach onMessage handler:",s)),()=>{r&&r();}},subscribe(n,r){let s=null;return o().then(a=>{s=a.subscribe(n,r);}).catch(a=>console.error(`[SSE] Failed to subscribe to event "${n}":`,a)),()=>{s&&s();}}}}function M(t,e){let o=n=>{let r=t[n];return async(s,a,i)=>{let c=n==="get"||n==="delete",m=c?void 0:a,p=c?a:i,f={method:n,url:s,headers:p?.headers??{},body:m};try{if(e.onBeforeRequest){let l=await e.onBeforeRequest(f);l&&typeof l=="object"&&(f={...f,...l});}let d={...p,headers:f.headers},u=c?await r(f.url,d):await r(f.url,f.body,d);if(e.onAfterResponse){let l=await e.onAfterResponse({method:n,url:f.url,response:u});l&&typeof l=="object"&&(u={...u,...l});}return u}catch(d){throw e.onError&&await e.onError(n,f.url,d,f.body),d}}};return {get:o("get"),post:o("post"),patch:o("patch"),put:o("put"),delete:o("delete")}}function O(t,e){return {...t,connect:()=>{e.onBeforeConnect&&Promise.resolve(e.onBeforeConnect()).catch(console.error),t.connect(),e.onAfterConnect&&Promise.resolve(e.onAfterConnect()).catch(console.error);},send:o=>{e.onBeforeSend&&Promise.resolve(e.onBeforeSend(o)).catch(console.error),t.send(o),e.onAfterSend&&Promise.resolve(e.onAfterSend(o)).catch(console.error);},close:()=>{e.onBeforeClose&&Promise.resolve(e.onBeforeClose()).catch(console.error),t.close(),e.onAfterClose&&Promise.resolve(e.onAfterClose()).catch(console.error);}}}function U(t,e){return {...t,open:async o=>{let n=o;if(e.onBeforeOpen){let r=await e.onBeforeOpen(n);r&&typeof r=="object"&&(n={...n,...r});}t.open(n),e.onAfterOpen&&Promise.resolve(e.onAfterOpen(n)).catch(console.error);},close:()=>{e.onBeforeClose&&Promise.resolve(e.onBeforeClose()).catch(console.error),t.close(),e.onAfterClose&&Promise.resolve(e.onAfterClose()).catch(console.error);},onError:o=>t.onError(n=>{e.onError&&Promise.resolve(e.onError(new Error(n.type))).catch(console.error),o(n);}),onMessage:o=>t.onMessage(n=>{e.onMessage&&Promise.resolve(e.onMessage(n)).catch(console.error),o(n);})}}function y(t,...e){return o=>{let{delegate:n,...r}=e.reduce((a,i)=>{let c=i(a);return Object.assign({},a,c)},{...o,delegate:q(t)});return {[t.name??"delegate"]:n,...r}}}function Oe(t,...e){return y(t,...e)}function b(t,e){return typeof t=="string"?{options:{name:t},allFeatures:e}:typeof t=="function"?{options:{},allFeatures:[t,...e]}:t!==void 0?{options:t,allFeatures:e}:{options:{},allFeatures:e}}function xe(t,e,...o){return y({...e,baseURL:t,type:"http"},...o)}function Te(t,e,...o){let{options:n,allFeatures:r}=b(e,o);return y({...n,baseURL:t,type:"http"},...r)}function Ae(t,e,...o){let{options:n,allFeatures:r}=b(e,o);return y({...n,baseURL:t,type:"http",impl:"axios"},...r)}function Re(t,e,...o){let{options:n,allFeatures:r}=b(e,o);return y({...n,baseURL:t,type:"http",impl:"better-fetch"},...r)}function Be(t,e,...o){let{options:n,allFeatures:r}=b(e,o);return y({...n,baseURL:t,type:"server-sent-event"},...r)}function He(t,e,...o){let{options:n,allFeatures:r}=b(e,o);return y({...n,baseURL:t,type:"websocket"},...r)}function Pe(t){return ()=>({...t})}function We(t){return e=>({...t(e),...e})}function Q(t){let e=Object.keys(t.environments),o=t.default||e[0],n=o;function r(){return n}function s(i){if(t.environments[i])n=i,console.info(`[ENVIRONMENTS] Switched to environment: ${i} (${t.environments[i]})`);else {let c=t.fallback||o;console.warn(`[ENVIRONMENTS] Environment "${i}" not found, falling back to "${String(c)}"`),n=c;}}function a(){return t.environments[n]||t.environments[Object.keys(t.environments)[0]]}return {getCurrentEnvironment:r,setEnvironment:s,getBaseURL:a}}function Z(t,e){let o=n=>{let r=e.getBaseURL();if(n.startsWith("http"))return n;let s=r.replace(/\/$/,""),a=n.startsWith("/")?n:`/${n}`,i=`${s}${a}`;return console.info(`[ENVIRONMENTS] Building URL: ${s} + ${a} = ${i}`),i};return M(t,{onBeforeRequest:n=>({url:o(n.url)})})}function ee(t,e){return O(t,{onBeforeConnect:()=>{console.info(`[ENVIRONMENTS] WebSocket connecting to: ${e.getBaseURL()}`);}})}function te(t,e){return k(t)?Z(t,e):F(t)?ee(t,e):t}function qe(t){return e=>{let{name:o}=t,n=Q(t);return {...e,[o]:te(e[o],n),environments:n}}}function je(t){return ({delegate:e,...o})=>k(e)?{...o,delegate:M(e,t)}:$(e)?{...o,delegate:U(e,t)}:F(e)?{...o,delegate:O(e,t)}:{...o,delegate:e}}function ne(){return typeof navigator<"u"&&navigator.onLine!==void 0?navigator.onLine:true}function re(t){let e=new Map,o=t.cacheTTL??3e5;function n(a,i,c){let m=c?JSON.stringify(c):"";return `${a}:${i}:${m}`}function r(a){let i=e.get(a);return i?Date.now()-i.timestamp>i.ttl?(e.delete(a),null):i.data:null}function s(a,i){e.set(a,{data:i,timestamp:Date.now(),ttl:o});}return {isOnline:ne,clearCache:()=>e.clear(),getCacheSize:()=>e.size,getFromCache:r,setInCache:s,generateCacheKey:n}}function oe(t,e,o){let n=o.strategy??"cache-first",r=s=>{let a=t[s];return async(i,c,m)=>{let p=s==="get"||s==="delete",f=p?void 0:c,d=p?c:m,u=e.generateCacheKey(String(s),i,f);if(n==="cache-first"){let l=e.getFromCache(u);if(l)return console.info(`[OFFLINE] Cache hit for ${s} ${i}`),l;if(e.isOnline())try{let g=p?await a(i,d):await a(i,f,d);return e.setInCache(u,g),g}catch(g){throw console.error(`[OFFLINE] Network error for ${s} ${i}:`,g),g}throw new Error(`[OFFLINE] No cache available and offline for ${s} ${i}`)}if(n==="network-first"){if(e.isOnline())try{let g=p?await a(i,d):await a(i,f,d);return e.setInCache(u,g),g}catch(g){let D=e.getFromCache(u);if(D)return console.warn(`[OFFLINE] Network failed, using cache for ${s} ${i}`),D;throw g}let l=e.getFromCache(u);if(l)return l;throw new Error(`[OFFLINE] Offline and no cache for ${s} ${i}`)}if(n==="network-only"){if(!e.isOnline())throw new Error(`[OFFLINE] Network unavailable for ${s} ${i}`);return p?await a(i,d):await a(i,f,d)}throw new Error(`[OFFLINE] Unknown strategy: ${n}`)}};return {get:r("get"),post:r("post"),patch:r("patch"),put:r("put"),delete:r("delete")}}function se(t,e,o){return k(t)?oe(t,e,o):t}function ze(t={}){return ({delegate:e,...o})=>{let n=re(t);return {...o,delegate:se(e,n,t),offline:n}}}function ae({enableMetrics:t=false,enableTracing:e=false,enableLogging:o=false,onEvent:n=()=>{},onMetrics:r=()=>{}}){let s=[],a={requests:{total:0,success:0,errors:0},latency:{avg:0,min:Number.MAX_SAFE_INTEGER,max:Number.MIN_SAFE_INTEGER}};function i(u){s.push(u),p(u),o&&d(u),n(u);}function c(){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 p(u){if(t){switch(u.type){case "request":a.requests.total++;break;case "response":a.requests.success++,u.duration&&f(u.duration);break;case "error":a.requests.errors++,u.duration&&f(u.duration);break}r(a);}}function f(u){let l=s.filter(g=>g.duration!==void 0).map(g=>g.duration).filter(g=>g>0);l.length>0&&(a.latency.avg=l.reduce((g,D)=>g+D,0)/l.length,a.latency.min=Math.min(...l),a.latency.max=Math.max(...l));}function d(u){let l=u.type==="error"?"error":"info",g=`[TELEMETRY] ${u.operation} ${u.duration?`(${u.duration}ms)`:""}`;u.type==="error"&&u.error?console[l](g,u.error):console[l](g);}return {recordEvent:i,generateTraceId:c,getMetrics:m}}function ie(t){let e=new Map;return {onBeforeRequest:o=>{let n=t.generateTraceId(),r=`${o.method.toUpperCase()} ${o.url}`,s=Date.now();e.set(r,{time:s,traceId:n}),t.recordEvent({timestamp:s,type:"request",operation:r,traceId:n});},onAfterResponse:o=>{let n=`${o.method.toUpperCase()} ${o.url}`,r=e.get(n);if(r){let s=Date.now()-r.time;t.recordEvent({timestamp:Date.now(),type:"response",operation:n,duration:s,status:200,traceId:r.traceId}),e.delete(n);}return o.response},onError:(o,n,r)=>{let s=`${o.toUpperCase()} ${n}`,a=e.get(s);if(a){let i=Date.now()-a.time;t.recordEvent({timestamp:Date.now(),type:"error",operation:s,duration:i,error:r,traceId:a.traceId}),e.delete(s);}}}}function ue(t,e){let o=n=>{let r=e.generateTraceId(),s=Date.now();return e.recordEvent({timestamp:s,type:"request",operation:n,traceId:r}),{success:()=>{let a=Date.now()-s;e.recordEvent({timestamp:Date.now(),type:"response",operation:n,duration:a,status:200,traceId:r});},error:a=>{let i=Date.now()-s;e.recordEvent({timestamp:Date.now(),type:"error",operation:n,duration:i,error:a,traceId:r});}}};return {...t,connect:()=>{let n=o("connect");try{t.connect(),n.success();}catch(r){throw n.error(r),r}},send:n=>{let r=o("send");try{t.send(n),r.success();}catch(s){throw r.error(s),s}},close:()=>{let n=o("close");try{t.close(),n.success();}catch(r){throw n.error(r),r}},onMessage:n=>{let r=o("onMessage");try{let s=t.onMessage(n);return r.success(),s}catch(s){throw r.error(s),s}},onError:n=>t.onError(r=>{o("onError").error(new Error("WebSocket error")),n(r);})}}function ce(t,e){return k(t)?M(t,ie(e)):F(t)?ue(t,e):t}function Xe(t={}){return ({delegate:e,...o})=>{let n=ae(t);return {...o,delegate:ce(e,n),telemetry:n}}}function gt(...t){let e=t.reduce((r,s)=>Object.assign(r,s(r)),{}),{onInit:o,...n}=e;return typeof o=="function"&&o(n),n}exports.universalClient=gt;exports.withAxiosDelegate=Ae;exports.withBetterFetchDelegate=Re;exports.withDelegate=Oe;exports.withEnvironments=qe;exports.withFetchDelegate=Te;exports.withHooks=Pe;exports.withHttpDelegate=xe;exports.withInterceptor=je;exports.withMethods=We;exports.withOffline=ze;exports.withSseDelegate=Be;exports.withTelemetry=Xe;exports.withWebSocketDelegate=He;//# sourceMappingURL=index.js.map
9
9
  //# sourceMappingURL=index.js.map