@swarm.ing/pieui 2.1.5 → 2.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- var Z$=Object.create;var{getPrototypeOf:I$,defineProperty:y,getOwnPropertyNames:KU,getOwnPropertyDescriptor:X$}=Object,TU=Object.prototype.hasOwnProperty;var Y$=(U,$,H)=>{H=U!=null?Z$(I$(U)):{};let J=$||!U||!U.__esModule?y(H,"default",{value:U,enumerable:!0}):H;for(let I of KU(U))if(!TU.call(J,I))y(J,I,{get:()=>U[I],enumerable:!0});return J},LU=new WeakMap,z$=(U)=>{var $=LU.get(U),H;if($)return $;if($=y({},"__esModule",{value:!0}),U&&typeof U==="object"||typeof U==="function")KU(U).map((J)=>!TU.call($,J)&&y($,J,{get:()=>U[J],enumerable:!(H=X$(U,J))||H.enumerable}));return LU.set(U,$),$};var G$=(U,$)=>{for(var H in $)y(U,H,{get:$[H],enumerable:!0,configurable:!0,set:(J)=>$[H]=()=>J})};var v$={};G$(v$,{useWebApp:()=>v,useInitData:()=>lU,SecureStorageCard:()=>J$,PieTelegramRoot:()=>eU,CloudStorageCard:()=>$$});module.exports=z$(v$);var x=require("react"),k=require("@tanstack/react-query");var _U=Y$(require("mitt")),h=require("react");var IU=globalThis,Q=(U,$)=>{let H=Symbol.for(U);if(!(H in IU))IU[H]=$();return IU[H]};function qU(){return Q("@swarm.ing/pieui:mitt-emitter",()=>_U.default())}var B$=Q("@swarm.ing/pieui:context:mitt",()=>h.createContext(null));var p=B$;var WU=require("socket.io-client"),VU=require("react");var OU=Q("@swarm.ing/pieui:socket-cache",()=>new Map),RU=(U)=>{let $=OU.get(U);if($)return $;let H=WU.io(U,{autoConnect:!1,transports:["websocket"]});return OU.set(U,H),H},Q$=Q("@swarm.ing/pieui:context:socket",()=>VU.createContext(null)),E=Q$;var AU=require("react"),XU=require("centrifuge");var MU=Q("@swarm.ing/pieui:centrifuge-cache",()=>new Map),EU=(U,$)=>{if(!$)return null;let H=`${U}::${$}`,J=MU.get(H);if(J)return J;async function I(){let X=await fetch(U+"api/centrifuge/gen_token",{credentials:"include"});if(!X.ok){if(X.status===401||X.status===403)throw new XU.Centrifuge.UnauthorizedError("Backend is not answering");throw Error(`Unexpected status code ${X.status}`)}return(await X.json()).token}let Z=new XU.Centrifuge($,{getToken:I});return MU.set(H,Z),Z},D$=Q("@swarm.ing/pieui:context:centrifuge",()=>AU.createContext(null)),j=D$;var r=require("react");var d=require("react"),c=new Map,l=new Map;function u(U,$){let H=`${U}::${$}`,J=U?c.get(H):void 0,[I,Z]=d.useState(J??null);return d.useEffect(()=>{if(!U)return;if(c.has(H)){Z(c.get(H));return}let X=l.get(H);if(!X)X=fetch(U+`api/support/${$}`,{method:"GET"}).then((z)=>z.json()).then((z)=>{return c.set(H,z),l.delete(H),z}).catch((z)=>{throw l.delete(H),z}),l.set(H,X);let B=!1;return X.then((z)=>{if(!B)Z(z)}).catch(()=>{}),()=>{B=!0}},[U,$,H]),I}var o=require("react");var YU=Q("@swarm.ing/pieui:context:pieConfig",()=>o.createContext(null)),s=()=>{let U=o.useContext(YU);if(!U)throw Error("usePieConfig must be used within PieConfigProvider");return U},zU=()=>{let{apiServer:U}=s();return U},n=zU,jU=()=>{let{centrifugeServer:U}=s();return U};var M=()=>{let{enableRenderingLog:U}=s();return U},PU=M,NU=()=>{let{pageProcessor:U}=s();return U};var F$=(U)=>{let $=document.cookie?document.cookie.split(";"):[];for(let H of $){let J=H.indexOf("=");if((J===-1?H:H.slice(0,J)).trim()===U){let Z=J===-1?"":H.slice(J+1).trim();try{return decodeURIComponent(Z)}catch{return Z}}}return null},L$={isClient(){return typeof window<"u"&&typeof document<"u"},readSid(){return typeof window>"u"?void 0:window.sid},setSid(U){if(typeof window<"u")window.sid=U},readWebStorage(U,$){return(U==="local"?window.localStorage:window.sessionStorage).getItem($)},readCookie:F$,readUrlParams(U){return new URLSearchParams(window.location.search).getAll(U)},readDomInput(U){let $=document.getElementsByName(U);if(!$.length)return null;let H=$[0];if(H instanceof HTMLInputElement){if(H.type==="file"&&H.files)return Array.from(H.files);return[H.value]}if(H instanceof HTMLTextAreaElement)return[H.value];return[]},submitGlobalForm(){if(typeof document>"u")return;let U=document.getElementById("piedata_global_form");U&&U.submit()}},wU=L$;var K$={};function A(){return K$}var xU=new Map;var kU=(U)=>{return xU.has(U)?xU.get(U):null};var bU,T$={isClient(){return!0},readSid(){return bU},setSid(U){bU=U},readWebStorage(U,$){let H=A(),J=U==="local"?H.storage:H.sessionStorage;return J?J.getItem($):null},async readWebStorageAsync(U,$){let H=A(),J=U==="local"?H.asyncStorage:H.asyncSessionStorage;if(J)return J.getItem($);let I=U==="local"?H.storage:H.sessionStorage;return I?I.getItem($):null},readCookie(U){let $=A();return $.getCookie?$.getCookie(U):null},readUrlParams(U){let $=A();return $.getRouteParams?$.getRouteParams(U):[]},readDomInput(U){let $=A();return $.getInput?$.getInput(U):kU(U)},submitGlobalForm(){A().submitForm?.()}},yU=T$;var _$=typeof navigator<"u"&&navigator.product==="ReactNative",q$=_$?yU:wU,i=q$;var O$=Q("@swarm.ing/pieui:sid-state",()=>({promise:null,resolve:null}));function fU(){O$.resolve?.()}var W$=({children:U})=>{let $=r.useContext(E),H=n(),J=u(H,"socketIO"),I=(Z)=>{if(i.isClient())i.setSid(Z.sid),fU(),console.log(`SocketIO initialized: ${i.readSid()}`)};return r.useEffect(()=>{if(!$)return;let Z=()=>{console.log("SocketIO connected")},X=(B)=>{console.log(`SocketIO disconnected: ${B}`),$.connect()};if(J)$.on("pieinit",I),$.on("connect",Z),$.on("disconnect",X),$.connect();return()=>{if(J)$.off("pieinit",I),$.off("connect",Z),$.off("disconnect",X),$.disconnect()}},[$,J]),U},CU=W$;var a=require("react");var V$=({children:U})=>{let $=a.useContext(j),H=n(),J=u(H,"centrifuge");return a.useEffect(()=>{if(!$)return;let I=()=>{console.log("Centrifuge connected")},Z=(X)=>{console.log("Centrifuge disconnected:",X)};if(J)$.on("connected",I),$.on("disconnected",Z),$.connect();return()=>{if(J)$.disconnect()}},[$,J]),U},vU=V$;var SU=require("react");var t=require("react/jsx-runtime"),R$=Q("@swarm.ing/pieui:context:fallback",()=>SU.createContext(t.jsx(t.Fragment,{}))),P=R$;var gU=require("react");var M$=Q("@swarm.ing/pieui:context:lazyError",()=>gU.createContext(void 0)),N=M$;var mU=require("react"),f=new Map;function A$(U,$){return $.catch(()=>{if(f.get(U)===$)f.delete(U)}),f.set(U,$),$}function hU(U,$){return mU.lazy(()=>{if(f.has($))return f.get($);return A$($,U().then((H)=>H))})}var pU=Q("@swarm.ing/pieui:component-registry",()=>new Map),E$=(U)=>{if(!U.name)throw Error("Component registration requires a name");if(!U.component&&!U.loader)throw Error(`Component "${U.name}" requires component or loader`);let $={name:U.name,component:U.component,loader:U.loader,metadata:U.metadata,fallback:U.fallback,isLazy:!1};if(!$.component&&$.loader)$.component=hU($.loader,U.name),$.isLazy=!0;return $};function e(U){let $=E$(U);return pU.set($.name,$),$.component}var UU=(U)=>{return pU.get(U)};var C=require("react");var $U=require("react"),cU=require("react/jsx-runtime"),j$=2,P$=400;class w extends $U.Component{state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(U){if(this.props.onError?.(U),this.state.attempt<j$){let $=P$*(this.state.attempt+1);this.timer=setTimeout(()=>{this.setState((H)=>({failed:!1,attempt:H.attempt+1}))},$)}}componentDidUpdate(U){if(U.name!==this.props.name&&this.state.attempt!==0)this.setState({failed:!1,attempt:0})}componentWillUnmount(){if(this.timer)clearTimeout(this.timer)}render(){if(this.state.failed)return this.props.fallback;return cU.jsx($U.Suspense,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}var HU=require("react/jsx-runtime");function N$({uiConfig:U,setUiAjaxConfiguration:$}){let H=C.useContext(P),J=C.useContext(N),I=M();if(I)console.log("[UI] Rendering component:",U.card),console.log("[UI] Component data:",U.data),console.log("[UI] Component content:",U.content),console.log("[UI] Has setUiAjaxConfiguration:",!!$);let Z=UU(U.card);if(!Z?.component){if(I)console.warn(`[UI] Component not found in registry: ${U.card}`),console.log("[UI] Returning fallback component");return H}if(I)console.log("[UI] Found component in registry:",{name:Z.name,isLazy:Z.isLazy,hasMetadata:!!Z.metadata});let X=Z.component,B=HU.jsx(X,{data:U.data,content:U.content,setUiAjaxConfiguration:$});if(Z.isLazy){if(I)console.log("[UI] Rendering lazy component with Suspense:",Z.name);return HU.jsx(w,{name:Z.name,fallback:Z.fallback?HU.jsx(Z.fallback,{}):H,onError:J,children:B})}if(I)console.log("[UI] Rendering component directly:",Z.name);return B}var GU=C.memo(N$);var tU=require("axios-date-transformer");var JU=require("react");var v=({onError:U}={})=>{let[$,H]=JU.useState(null),J=NU();return JU.useEffect(()=>{if(typeof window>"u")return;let I=window.Telegram?.WebApp;if(!I)return;try{I.ready?.()}catch(Z){U?.()}if(J==="telegram_expanded"&&(I.platform==="ios"||I.platform==="android"))I.expand();H(I)},[]),$},lU=()=>{let U=v();return[U?.initDataUnsafe,U?.initData]};var dU=require("react");var w$=Q("@swarm.ing/pieui:context:navigate",()=>dU.createContext(void 0)),uU=w$;var BU=require("react");var oU=require("react");var x$=Q("@swarm.ing/pieui:context:uiRenderer",()=>oU.createContext(null)),sU=x$;var S=require("react/jsx-runtime");function nU({uiConfig:U,setUiAjaxConfiguration:$}){let H=BU.useContext(P),J=BU.useContext(N),I=M();if(I)console.log("[UILoading] Rendering fallback for:",U.card),console.log("[UILoading] Component data:",U.data),console.log("[UILoading] Component content:",U.content),console.log("[UILoading] Has setUiAjaxConfiguration:",!!$);let Z=UU(U.card);if(!Z?.component){if(I)console.warn(`[UILoading] Component not found in registry: ${U.card}`),console.log("[UILoading] Returning fallback component");return H}if(I)console.log("[UILoading] Found component in registry:",{name:Z.name,isLazy:Z.isLazy,hasMetadata:!!Z.metadata,hasFallback:!!Z.fallback});if(Z.fallback){if(I)console.log("[UILoading] Rendering fallback for:",Z.name);let z=Z.fallback;return S.jsx(z,{})}if(I)console.log("[UILoading] No fallback, rendering full component:",Z.name);let X=Z.component,B=S.jsx(sU.Provider,{value:nU,children:S.jsx(X,{data:U.data,content:U.content,setUiAjaxConfiguration:$})});if(Z.isLazy)return S.jsx(w,{name:Z.name,fallback:H,onError:J,children:B});return B}var iU=nU;var aU=require("react/jsx-runtime");function rU(U,$,H){if(!$)return H;let J=U.replace(/^\//,""),I=$[J];if(!I)return H;return aU.jsx(iU,{uiConfig:I})}var L=require("react/jsx-runtime"),k$=({location:U,fallback:$,piecache:H,onError:J,queryOptions:I,disableGlobalForm:Z})=>{let X=zU(),B=jU(),z=M(),D=x.useMemo(()=>tU.createAxiosDateTransformer({baseURL:X}),[X]),Y=x.useMemo(()=>qU(),[]),V=x.useMemo(()=>X?RU(X):null,[X]),R=x.useMemo(()=>X?EU(X,B):null,[X,B]),T=v({onError:J}),{data:q,isLoading:O,error:G}=k.useQuery({queryKey:["uiConfig",U.pathname+U.search,T?.initData],enabled:!!T?.initData,queryFn:async()=>{let K=new URLSearchParams(U.search);if(K.set("__pieroot","telegram"),T?.initData)K.set("initData",T.initData);let W="/api/content"+U.pathname+"?"+K.toString();if(z)console.log("[PieRoot] Fetching UI configuration from:",W);let FU=await D.get(W,{headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET,PUT,POST,DELETE,PATCH,OPTIONS","Content-type":"application/json"},withCredentials:!0});if(z)console.log("[PieRoot] Received UI configuration:",FU.data);return FU.data},staleTime:1/0,gcTime:1/0,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,retry:!0,retryDelay:(K)=>Math.min(1000*2**K,30000),...I}),F=rU(U.pathname,H,$);if(!X)throw Error("Set PIE_API_SERVER and PIE_CENTRIFUGE_SERVER");if(G&&z)return console.error("[PieRoot] Error fetching UI configuration:",G),console.error("[PieRoot] Error details:",{message:G.message,status:G.response?.status,data:G.response?.data}),J?.(G),F;if(O||!q){if(z)console.log("[PieRoot] Loading state:",{isLoading:O,hasUiConfiguration:!!q});return F}if(z)console.log("[PieRoot] UI configuration loaded successfully:",q),console.log("[PieRoot] Rendering UI with configuration");return L.jsx(p.Provider,{value:Y,children:L.jsx(E.Provider,{value:V,children:L.jsx(j.Provider,{value:R,children:L.jsx(P.Provider,{value:$??L.jsx(L.Fragment,{}),children:L.jsx(CU,{children:L.jsx(vU,{children:Z?L.jsx(GU,{uiConfig:q}):L.jsx("form",{id:"piedata_global_form",action:X+"api/process"+U.pathname,method:"post",encType:"multipart/form-data",children:L.jsx(GU,{uiConfig:q})})})})})})})})},b$=(U)=>{let $=x.useMemo(()=>new k.QueryClient,[]),H=U.queryClient??$;return L.jsx(uU.Provider,{value:U.onNavigate,children:L.jsx(YU.Provider,{value:U.config,children:L.jsx(N.Provider,{value:U.onError,children:L.jsx(k.QueryClientProvider,{client:H,children:L.jsx(k$,{...U})})})})})},eU=b$;var g=require("react");var _=require("react");var b=require("react/jsx-runtime"),y$=({card:U,data:$,children:H,useSocketioSupport:J=!1,useCentrifugeSupport:I=!1,useMittSupport:Z=!1,centrifugeChannel:X=void 0,methods:B=void 0,stored:z=void 0})=>{let D=PU(),Y=_.useRef(B);if(Y.current=B,D)console.log("[PieCard] Rendering card:",U),console.log("[PieCard] Card data:",$),console.log("[PieCard] Component name:",$?.name),console.log("[PieCard] Real-time support:",{socketio:J,centrifuge:I,mitt:Z,centrifugeChannel:X}),console.log("[PieCard] Methods:",B?Object.keys(B):"none"),console.log("[PieCard] Has children:",!!H);let V=_.useContext(E),R=_.useContext(j),T=_.useContext(p);if(_.useEffect(()=>{if(!V||!J||!Y.current||!$.name){if(D&&J)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!V,useSocketioSupport:J,hasMethods:!!Y.current,hasDataName:!!$?.name});return}let O=Object.keys(Y.current??{}).map((G)=>{let F=`pie${G}_${$.name}`;if(D)console.log(`[PieCard] Socket.IO registering event: ${F}`);let K=(W)=>{Y.current?.[G]?.(W)};return V.on(F,K),[F,K]});return()=>{O.forEach(([G,F])=>{if(D)console.log(`[PieCard] Socket.IO unregistering event: ${G}`);V.off(G,F)})}},[V,$.name,J]),_.useEffect(()=>{if(!R||!I||!X||!$.name){if(D&&I)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!R,useCentrifugeSupport:I,hasCentrifugeChannel:!!X,hasMethods:!!Y.current,hasDataName:!!$?.name});return}let O=Object.keys(Y.current??{}).map((G)=>{let F=`pie${G}_${$.name}_${X}`;if(D)console.log(`[PieCard] Centrifuge subscribing to channel: ${F}`);let K=R.newSubscription(F);return K.on("publication",(W)=>{if(D)console.log(`[PieCard] Centrifuge received data on ${F}:`,W.data);Y.current?.[G]?.(W.data)}),K.subscribe(),K});return()=>{O.forEach((G)=>{if(D)console.log("[PieCard] Centrifuge unsubscribing from channel");G.unsubscribe(),R.removeSubscription(G)})}},[R,X,$.name,I]),_.useEffect(()=>{if(!T||!Z||!$.name){if(D&&Z)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!T,useMittSupport:Z,hasMethods:!!Y.current,hasDataName:!!$?.name});return}let q=Object.keys(Y.current??{}),O={};return q.forEach((G)=>{let F=`pie${G}_${$.name}`,K=(W)=>{if(D)console.log(`[PieCard] Mitt registering event: ${F}`);Y.current?.[G]?.(W)};O[F]=K,T.on(F,K)}),()=>{Object.entries(O).forEach(([G,F])=>{if(D)console.log(`[PieCard] Mitt unregistering event: ${G}`);T.off(G,F)})}},[T,$.name,Z]),D)console.log("[PieCard] Rendering complete, returning children");if(z!==void 0)return b.jsxs(b.Fragment,{children:[b.jsx("input",{type:"hidden",name:$.name,value:JSON.stringify(z)}),H]});return H},ZU=y$;var QU=require("react/jsx-runtime"),f$=({data:U})=>{let{name:$,key:H,value:J,useSocketioSupport:I,useCentrifugeSupport:Z,useMittSupport:X,centrifugeChannel:B}=U,[z,D]=g.useState(J);return g.useEffect(()=>{D(J)},[J]),g.useEffect(()=>{if(typeof window>"u")return;let Y=window.Telegram?.WebApp?.CloudStorage;if(!Y)return;Y.setItem(H,z)},[H,z]),QU.jsx(ZU,{card:"CloudStorageCard",data:U,useSocketioSupport:I,useCentrifugeSupport:Z,useMittSupport:X,centrifugeChannel:B,methods:{update:({value:Y})=>{D(Y)},remove:()=>{let Y=window.Telegram?.WebApp?.CloudStorage;if(Y)Y.removeItem(H);D("")}},children:QU.jsx("input",{type:"hidden",id:$,name:$,value:z})})},U$=f$;var $$=e({name:"CloudStorageCard",component:U$,metadata:{author:"PieData"}});var m=require("react");var DU=require("react/jsx-runtime"),C$=({data:U})=>{let{name:$,key:H,value:J,useSocketioSupport:I,useCentrifugeSupport:Z,useMittSupport:X,centrifugeChannel:B}=U,[z,D]=m.useState(J);return m.useEffect(()=>{D(J)},[J]),m.useEffect(()=>{if(typeof window>"u")return;let Y=window.Telegram?.WebApp?.SecureStorage;if(!Y)return;Y.setItem(H,z)},[H,z]),DU.jsx(ZU,{card:"SecureStorageCard",data:U,useSocketioSupport:I,useCentrifugeSupport:Z,useMittSupport:X,centrifugeChannel:B,methods:{update:({value:Y})=>{D(Y)},remove:()=>{let Y=window.Telegram?.WebApp?.SecureStorage;if(Y)Y.removeItem(H);D("")}},children:DU.jsx("input",{type:"hidden",id:$,name:$,value:z})})},H$=C$;var J$=e({name:"SecureStorageCard",component:H$,metadata:{author:"PieData"}});
2
+ var Q$=Object.create;var{getPrototypeOf:_$,defineProperty:b,getOwnPropertyNames:WU,getOwnPropertyDescriptor:D$}=Object,OU=Object.prototype.hasOwnProperty;var F$=(U,$,I)=>{I=U!=null?Q$(_$(U)):{};let J=$||!U||!U.__esModule?b(I,"default",{value:U,enumerable:!0}):I;for(let X of WU(U))if(!OU.call(J,X))b(J,X,{get:()=>U[X],enumerable:!0});return J},qU=new WeakMap,T$=(U)=>{var $=qU.get(U),I;if($)return $;if($=b({},"__esModule",{value:!0}),U&&typeof U==="object"||typeof U==="function")WU(U).map((J)=>!OU.call($,J)&&b($,J,{get:()=>U[J],enumerable:!(I=D$(U,J))||I.enumerable}));return qU.set(U,$),$};var K$=(U,$)=>{for(var I in $)b(U,I,{get:$[I],enumerable:!0,configurable:!0,set:(J)=>$[I]=()=>J})};var l$={};K$(l$,{useWebApp:()=>m,useInitData:()=>sU,SecureStorageCard:()=>H$,PieTelegramRoot:()=>J$,CloudStorageCard:()=>G$});module.exports=T$(l$);var k=require("react"),C=require("@tanstack/react-query");var VU=F$(require("mitt")),l=require("react");var GU=globalThis,_=(U,$)=>{let I=Symbol.for(U);if(!(I in GU))GU[I]=$();return GU[I]};function MU(){return _("@swarm.ing/pieui:mitt-emitter",()=>VU.default())}var L$=_("@swarm.ing/pieui:context:mitt",()=>l.createContext(null));var c=L$;var EU=require("socket.io-client"),RU=require("react");var AU=_("@swarm.ing/pieui:socket-cache",()=>new Map),jU=(U)=>{let $=AU.get(U);if($)return $;let I=EU.io(U,{autoConnect:!1,transports:["websocket"]});return AU.set(U,I),I},q$=_("@swarm.ing/pieui:context:socket",()=>RU.createContext(null)),j=q$;var NU=require("react"),BU=require("centrifuge");var PU=_("@swarm.ing/pieui:centrifuge-cache",()=>new Map),wU=(U,$)=>{if(!$)return null;let I=`${U}::${$}`,J=PU.get(I);if(J)return J;async function X(){let Y=await fetch(U+"api/centrifuge/gen_token",{credentials:"include"});if(!Y.ok){if(Y.status===401||Y.status===403)throw new BU.Centrifuge.UnauthorizedError("Backend is not answering");throw Error(`Unexpected status code ${Y.status}`)}return(await Y.json()).token}let Z=new BU.Centrifuge($,{getToken:X});return PU.set(I,Z),Z},W$=_("@swarm.ing/pieui:context:centrifuge",()=>NU.createContext(null)),P=W$;var e=require("react");var s=require("react"),u=new Map,o=new Map;function n(U,$){let I=`${U}::${$}`,J=U?u.get(I):void 0,[X,Z]=s.useState(J??null);return s.useEffect(()=>{if(!U)return;if(u.has(I)){Z(u.get(I));return}let Y=o.get(I);if(!Y)Y=fetch(U+`api/support/${$}`,{method:"GET"}).then((G)=>G.json()).then((G)=>{return u.set(I,G),o.delete(I),G}).catch((G)=>{throw o.delete(I),G}),o.set(I,Y);let H=!1;return Y.then((G)=>{if(!H)Z(G)}).catch(()=>{}),()=>{H=!0}},[U,$,I]),X}var i=require("react");var HU=_("@swarm.ing/pieui:context:pieConfig",()=>i.createContext(null)),r=()=>{let U=i.useContext(HU);if(!U)throw Error("usePieConfig must be used within PieConfigProvider");return U},QU=()=>{let{apiServer:U}=r();return U},a=QU,xU=()=>{let{centrifugeServer:U}=r();return U};var E=()=>{let{enableRenderingLog:U}=r();return U},kU=E,CU=()=>{let{pageProcessor:U}=r();return U};var O$=(U)=>{let $=document.cookie?document.cookie.split(";"):[];for(let I of $){let J=I.indexOf("=");if((J===-1?I:I.slice(0,J)).trim()===U){let Z=J===-1?"":I.slice(J+1).trim();try{return decodeURIComponent(Z)}catch{return Z}}}return null},V$={isClient(){return typeof window<"u"&&typeof document<"u"},readSid(){return typeof window>"u"?void 0:window.sid},setSid(U){if(typeof window<"u")window.sid=U},readWebStorage(U,$){return(U==="local"?window.localStorage:window.sessionStorage).getItem($)},readCookie:O$,readUrlParams(U){return new URLSearchParams(window.location.search).getAll(U)},readDomInput(U){let $=document.getElementsByName(U);if(!$.length)return null;let I=$[0];if(I instanceof HTMLInputElement){if(I.type==="file"&&I.files)return Array.from(I.files);return[I.value]}if(I instanceof HTMLTextAreaElement)return[I.value];return[]},submitGlobalForm(){if(typeof document>"u")return;let U=document.getElementById("piedata_global_form");U&&U.submit()}},yU=V$;var M$={};function R(){return M$}var fU=new Map;var bU=(U)=>{return fU.has(U)?fU.get(U):null};var vU,A$={isClient(){return!0},readSid(){return vU},setSid(U){vU=U},readWebStorage(U,$){let I=R(),J=U==="local"?I.storage:I.sessionStorage;return J?J.getItem($):null},async readWebStorageAsync(U,$){let I=R(),J=U==="local"?I.asyncStorage:I.asyncSessionStorage;if(J)return J.getItem($);let X=U==="local"?I.storage:I.sessionStorage;return X?X.getItem($):null},readCookie(U){let $=R();return $.getCookie?$.getCookie(U):null},readUrlParams(U){let $=R();return $.getRouteParams?$.getRouteParams(U):[]},readDomInput(U){let $=R();return $.getInput?$.getInput(U):bU(U)},submitGlobalForm(){R().submitForm?.()}},SU=A$;var E$=typeof navigator<"u"&&navigator.product==="ReactNative",R$=E$?SU:yU,t=R$;var j$=_("@swarm.ing/pieui:sid-state",()=>({promise:null,resolve:null}));function mU(){j$.resolve?.()}var P$=({children:U})=>{let $=e.useContext(j),I=a(),J=n(I,"socketIO"),X=(Z)=>{if(t.isClient())t.setSid(Z.sid),mU(),console.log(`SocketIO initialized: ${t.readSid()}`)};return e.useEffect(()=>{if(!$)return;let Z=()=>{console.log("SocketIO connected")},Y=(H)=>{console.log(`SocketIO disconnected: ${H}`),$.connect()};if(J)$.on("pieinit",X),$.on("connect",Z),$.on("disconnect",Y),$.connect();return()=>{if(J)$.off("pieinit",X),$.off("connect",Z),$.off("disconnect",Y),$.disconnect()}},[$,J]),U},gU=P$;var UU=require("react");var N$=({children:U})=>{let $=UU.useContext(P),I=a(),J=n(I,"centrifuge");return UU.useEffect(()=>{if(!$)return;let X=()=>{console.log("Centrifuge connected")},Z=(Y)=>{console.log("Centrifuge disconnected:",Y)};if(J)$.on("connected",X),$.on("disconnected",Z),$.connect();return()=>{if(J)$.disconnect()}},[$,J]),U},hU=N$;var pU=require("react");var $U=require("react/jsx-runtime"),w$=_("@swarm.ing/pieui:context:fallback",()=>pU.createContext($U.jsx($U.Fragment,{}))),N=w$;var dU=require("react");var x$=_("@swarm.ing/pieui:context:lazyError",()=>dU.createContext(void 0)),w=x$;var lU=require("react"),v=new Map;function k$(U,$){return $.catch(()=>{if(v.get(U)===$)v.delete(U)}),v.set(U,$),$}function cU(U,$){return lU.lazy(()=>{if(v.has($))return v.get($);return k$($,U().then((I)=>I))})}var uU=_("@swarm.ing/pieui:component-registry",()=>new Map),C$=(U)=>{if(!U.name)throw Error("Component registration requires a name");if(!U.component&&!U.loader)throw Error(`Component "${U.name}" requires component or loader`);let $={name:U.name,component:U.component,loader:U.loader,metadata:U.metadata,fallback:U.fallback,isLazy:!1};if(!$.component&&$.loader)$.component=cU($.loader,U.name),$.isLazy=!0;return $};function IU(U){let $=C$(U);return uU.set($.name,$),$.component}var JU=(U)=>{return uU.get(U)};var S=require("react");var ZU=require("react"),oU=require("react/jsx-runtime"),y$=2,f$=400;class x extends ZU.Component{state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(U){if(this.props.onError?.(U),this.state.attempt<y$){let $=f$*(this.state.attempt+1);this.timer=setTimeout(()=>{this.setState((I)=>({failed:!1,attempt:I.attempt+1}))},$)}}componentDidUpdate(U){if(U.name!==this.props.name&&this.state.attempt!==0)this.setState({failed:!1,attempt:0})}componentWillUnmount(){if(this.timer)clearTimeout(this.timer)}render(){if(this.state.failed)return this.props.fallback;return oU.jsx(ZU.Suspense,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}var XU=require("react/jsx-runtime");function b$({uiConfig:U,setUiAjaxConfiguration:$}){let I=S.useContext(N),J=S.useContext(w),X=E();if(X)console.log("[UI] Rendering component:",U.card),console.log("[UI] Component data:",U.data),console.log("[UI] Component content:",U.content),console.log("[UI] Has setUiAjaxConfiguration:",!!$);let Z=JU(U.card);if(!Z?.component){if(X)console.warn(`[UI] Component not found in registry: ${U.card}`),console.log("[UI] Returning fallback component");return I}if(X)console.log("[UI] Found component in registry:",{name:Z.name,isLazy:Z.isLazy,hasMetadata:!!Z.metadata});let Y=Z.component,H=XU.jsx(Y,{data:U.data,content:U.content,setUiAjaxConfiguration:$});if(Z.isLazy){if(X)console.log("[UI] Rendering lazy component with Suspense:",Z.name);return XU.jsx(x,{name:Z.name,fallback:Z.fallback?XU.jsx(Z.fallback,{}):I,onError:J,children:H})}if(X)console.log("[UI] Rendering component directly:",Z.name);return H}var _U=S.memo(b$);var I$=require("axios-date-transformer");var YU=require("react");var m=({onError:U}={})=>{let[$,I]=YU.useState(null),J=CU();return YU.useEffect(()=>{if(typeof window>"u")return;let X=window.Telegram?.WebApp;if(!X)return;try{X.ready?.()}catch(Z){U?.()}if(J==="telegram_expanded"&&(X.platform==="ios"||X.platform==="android"))X.expand();I(X)},[]),$},sU=()=>{let U=m();return[U?.initDataUnsafe,U?.initData]};var nU=require("react");var v$=_("@swarm.ing/pieui:context:navigate",()=>nU.createContext(void 0)),iU=v$;var DU=require("react");var rU=require("react");var S$=_("@swarm.ing/pieui:context:uiRenderer",()=>rU.createContext(null)),aU=S$;var g=require("react/jsx-runtime");function tU({uiConfig:U,setUiAjaxConfiguration:$}){let I=DU.useContext(N),J=DU.useContext(w),X=E();if(X)console.log("[UILoading] Rendering fallback for:",U.card),console.log("[UILoading] Component data:",U.data),console.log("[UILoading] Component content:",U.content),console.log("[UILoading] Has setUiAjaxConfiguration:",!!$);let Z=JU(U.card);if(!Z?.component){if(X)console.warn(`[UILoading] Component not found in registry: ${U.card}`),console.log("[UILoading] Returning fallback component");return I}if(X)console.log("[UILoading] Found component in registry:",{name:Z.name,isLazy:Z.isLazy,hasMetadata:!!Z.metadata,hasFallback:!!Z.fallback});if(Z.fallback){if(X)console.log("[UILoading] Rendering fallback for:",Z.name);let G=Z.fallback;return g.jsx(G,{})}if(X)console.log("[UILoading] No fallback, rendering full component:",Z.name);let Y=Z.component,H=g.jsx(aU.Provider,{value:tU,children:g.jsx(Y,{data:U.data,content:U.content,setUiAjaxConfiguration:$})});if(Z.isLazy)return g.jsx(x,{name:Z.name,fallback:I,onError:J,children:H});return H}var eU=tU;var $$=require("react/jsx-runtime");function U$(U,$,I){if(!$)return I;let J=U.replace(/^\//,""),X=$[J];if(!X)return I;return $$.jsx(eU,{uiConfig:X})}var D=require("react/jsx-runtime"),m$=({location:U,fallback:$,piecache:I,onError:J,queryOptions:X,disableGlobalForm:Z})=>{let Y=QU(),H=xU(),G=E(),K=k.useMemo(()=>I$.createAxiosDateTransformer({baseURL:Y}),[Y]),z=k.useMemo(()=>MU(),[]),T=k.useMemo(()=>Y?jU(Y):null,[Y]),d=k.useMemo(()=>Y?wU(Y,H):null,[Y,H]),W=m({onError:J}),{data:L,isLoading:M,error:O}=C.useQuery({queryKey:["uiConfig",U.pathname+U.search,W?.initData],enabled:!!W?.initData,queryFn:async()=>{let B=new URLSearchParams(U.search);if(B.set("__pieroot","telegram"),W?.initData)B.set("initData",W.initData);let Q="/api/content"+U.pathname+"?"+B.toString();if(G)console.log("[PieRoot] Fetching UI configuration from:",Q);let F=await K.get(Q,{headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET,PUT,POST,DELETE,PATCH,OPTIONS","Content-type":"application/json"},withCredentials:!0});if(G)console.log("[PieRoot] Received UI configuration:",F.data);return F.data},staleTime:1/0,gcTime:1/0,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,retry:!0,retryDelay:(B)=>Math.min(1000*2**B,30000),...X}),V=U$(U.pathname,I,$);if(!Y)throw Error("Set PIE_API_SERVER and PIE_CENTRIFUGE_SERVER");if(O&&G)return console.error("[PieRoot] Error fetching UI configuration:",O),console.error("[PieRoot] Error details:",{message:O.message,status:O.response?.status,data:O.response?.data}),J?.(O),V;if(M||!L){if(G)console.log("[PieRoot] Loading state:",{isLoading:M,hasUiConfiguration:!!L});return V}if(G)console.log("[PieRoot] UI configuration loaded successfully:",L),console.log("[PieRoot] Rendering UI with configuration");return D.jsx(c.Provider,{value:z,children:D.jsx(j.Provider,{value:T,children:D.jsx(P.Provider,{value:d,children:D.jsx(N.Provider,{value:$??D.jsx(D.Fragment,{}),children:D.jsx(gU,{children:D.jsx(hU,{children:Z?D.jsx(_U,{uiConfig:L}):D.jsx("form",{id:"piedata_global_form",action:Y+"api/process"+U.pathname,method:"post",encType:"multipart/form-data",children:D.jsx(_U,{uiConfig:L})})})})})})})})},g$=(U)=>{let $=k.useMemo(()=>new C.QueryClient,[]),I=U.queryClient??$;return D.jsx(iU.Provider,{value:U.onNavigate,children:D.jsx(HU.Provider,{value:U.config,children:D.jsx(w.Provider,{value:U.onError,children:D.jsx(C.QueryClientProvider,{client:I,children:D.jsx(m$,{...U})})})})})},J$=g$;var h=require("react");var q=require("react");function Z$(U){return U.wasRecovering===!0&&U.recovered===!1}function X$(U){return U.recoverable===!1}function Y$(U,$,I){let J=U.getSubscription($);if(J)return{subscription:J,createdHere:!1};return{subscription:U.newSubscription($,I),createdHere:!0}}var y=require("react/jsx-runtime"),h$=({card:U,data:$,children:I,useSocketioSupport:J=!1,useCentrifugeSupport:X=!1,useMittSupport:Z=!1,centrifugeChannel:Y=void 0,methods:H=void 0,stored:G=void 0,onResync:K=void 0})=>{let z=kU(),T=q.useRef(H);T.current=H;let d=q.useRef(K);if(d.current=K,z)console.log("[PieCard] Rendering card:",U),console.log("[PieCard] Card data:",$),console.log("[PieCard] Component name:",$?.name),console.log("[PieCard] Real-time support:",{socketio:J,centrifuge:X,mitt:Z,centrifugeChannel:Y}),console.log("[PieCard] Methods:",H?Object.keys(H):"none"),console.log("[PieCard] Has children:",!!I);let W=q.useContext(j),L=q.useContext(P),M=q.useContext(c);if(q.useEffect(()=>{if(!W||!J||!T.current||!$.name){if(z&&J)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!W,useSocketioSupport:J,hasMethods:!!T.current,hasDataName:!!$?.name});return}let V=Object.keys(T.current??{}).map((B)=>{let Q=`pie${B}_${$.name}`;if(z)console.log(`[PieCard] Socket.IO registering event: ${Q}`);let F=(A)=>{T.current?.[B]?.(A)};return W.on(Q,F),[Q,F]});return()=>{V.forEach(([B,Q])=>{if(z)console.log(`[PieCard] Socket.IO unregistering event: ${B}`);W.off(B,Q)})}},[W,$.name,J]),q.useEffect(()=>{if(!L||!X||!Y||!$.name){if(z&&X)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!L,useCentrifugeSupport:X,hasCentrifugeChannel:!!Y,hasMethods:!!T.current,hasDataName:!!$?.name});return}let V=Object.keys(T.current??{}).map((B)=>{let Q=`pie${B}_${$.name}_${Y}`;if(z)console.log(`[PieCard] Centrifuge subscribing to channel: ${Q}`);let{subscription:F,createdHere:A}=Y$(L,Q,{recoverable:!0,positioned:!0}),KU=(f)=>{if(z)console.log(`[PieCard] Centrifuge received data on ${Q}:`,f.data);T.current?.[B]?.(f.data)},LU=(f)=>{if(X$(f))console.warn(`[PieCard] Centrifuge channel ${Q} is not `+"recoverable — enable history on the server "+"namespace for exact replay; relying on resync fallback only.");if(Z$(f)){if(z)console.log(`[PieCard] Centrifuge recovery gap on ${Q}; requesting resync`);d.current?.({channel:Q,reason:"gap"})}};return F.on("publication",KU),F.on("subscribed",LU),F.subscribe(),{subscription:F,createdHere:A,onPublication:KU,onSubscribed:LU}});return()=>{V.forEach(({subscription:B,createdHere:Q,onPublication:F,onSubscribed:A})=>{if(z)console.log("[PieCard] Centrifuge unsubscribing from channel");if(B.off("publication",F),B.off("subscribed",A),Q)B.unsubscribe(),L.removeSubscription(B)})}},[L,Y,$.name,X]),q.useEffect(()=>{if(!M||!Z||!$.name){if(z&&Z)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!M,useMittSupport:Z,hasMethods:!!T.current,hasDataName:!!$?.name});return}let O=Object.keys(T.current??{}),V={};return O.forEach((B)=>{let Q=`pie${B}_${$.name}`,F=(A)=>{if(z)console.log(`[PieCard] Mitt registering event: ${Q}`);T.current?.[B]?.(A)};V[Q]=F,M.on(Q,F)}),()=>{Object.entries(V).forEach(([B,Q])=>{if(z)console.log(`[PieCard] Mitt unregistering event: ${B}`);M.off(B,Q)})}},[M,$.name,Z]),z)console.log("[PieCard] Rendering complete, returning children");if(G!==void 0)return y.jsxs(y.Fragment,{children:[y.jsx("input",{type:"hidden",name:$.name,value:JSON.stringify(G)}),I]});return I},zU=h$;var FU=require("react/jsx-runtime"),p$=({data:U})=>{let{name:$,key:I,value:J,useSocketioSupport:X,useCentrifugeSupport:Z,useMittSupport:Y,centrifugeChannel:H}=U,[G,K]=h.useState(J);return h.useEffect(()=>{K(J)},[J]),h.useEffect(()=>{if(typeof window>"u")return;let z=window.Telegram?.WebApp?.CloudStorage;if(!z)return;z.setItem(I,G)},[I,G]),FU.jsx(zU,{card:"CloudStorageCard",data:U,useSocketioSupport:X,useCentrifugeSupport:Z,useMittSupport:Y,centrifugeChannel:H,methods:{update:({value:z})=>{K(z)},remove:()=>{let z=window.Telegram?.WebApp?.CloudStorage;if(z)z.removeItem(I);K("")}},children:FU.jsx("input",{type:"hidden",id:$,name:$,value:G})})},z$=p$;var G$=IU({name:"CloudStorageCard",component:z$,metadata:{author:"PieData"}});var p=require("react");var TU=require("react/jsx-runtime"),d$=({data:U})=>{let{name:$,key:I,value:J,useSocketioSupport:X,useCentrifugeSupport:Z,useMittSupport:Y,centrifugeChannel:H}=U,[G,K]=p.useState(J);return p.useEffect(()=>{K(J)},[J]),p.useEffect(()=>{if(typeof window>"u")return;let z=window.Telegram?.WebApp?.SecureStorage;if(!z)return;z.setItem(I,G)},[I,G]),TU.jsx(zU,{card:"SecureStorageCard",data:U,useSocketioSupport:X,useCentrifugeSupport:Z,useMittSupport:Y,centrifugeChannel:H,methods:{update:({value:z})=>{K(z)},remove:()=>{let z=window.Telegram?.WebApp?.SecureStorage;if(z)z.removeItem(I);K("")}},children:TU.jsx("input",{type:"hidden",id:$,name:$,value:G})})},B$=d$;var H$=IU({name:"SecureStorageCard",component:B$,metadata:{author:"PieData"}});
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=centrifugeRecovery.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"centrifugeRecovery.test.d.ts","sourceRoot":"","sources":["../../src/tests/centrifugeRecovery.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=centrifugeSubscription.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"centrifugeSubscription.test.d.ts","sourceRoot":"","sources":["../../src/tests/centrifugeSubscription.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=piecardRecovery.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"piecardRecovery.test.d.ts","sourceRoot":"","sources":["../../src/tests/piecardRecovery.test.ts"],"names":[],"mappings":""}
@@ -10,6 +10,11 @@ import { Centrifuge } from 'centrifuge';
10
10
  * calls with the same arguments always return the same instance — which is
11
11
  * important because `Centrifuge` holds a live WebSocket connection.
12
12
  *
13
+ * Message recovery (exact replay of missed publications on reconnect)
14
+ * requires history retention on the server namespace — see
15
+ * `docs/realtime-recovery.md`. PieCard requests recoverable subscriptions and
16
+ * provides a resync fallback for gaps the history buffer cannot cover.
17
+ *
13
18
  * @param apiServer Base URL of the PieUI API server (must end with `/`).
14
19
  * @param centrifugeServer WebSocket URL of the Centrifuge server. When
15
20
  * omitted, the function returns `null` and the
@@ -1 +1 @@
1
- {"version":3,"file":"centrifuge.d.ts","sourceRoot":"","sources":["../../src/util/centrifuge.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAQvC;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,aAAa,GACtB,WAAW,MAAM,EACjB,mBAAmB,MAAM,KAC1B,UAAU,GAAG,IAgCf,CAAA;AAED;;;;GAIG;AACH,QAAA,MAAM,mBAAmB,4CAGxB,CAAA;AACD,eAAe,mBAAmB,CAAA"}
1
+ {"version":3,"file":"centrifuge.d.ts","sourceRoot":"","sources":["../../src/util/centrifuge.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAQvC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,aAAa,GACtB,WAAW,MAAM,EACjB,mBAAmB,MAAM,KAC1B,UAAU,GAAG,IAgCf,CAAA;AAED;;;;GAIG;AACH,QAAA,MAAM,mBAAmB,4CAGxB,CAAA;AACD,eAAe,mBAAmB,CAAA"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Subset of the Centrifuge `subscribed` event context relevant to message
3
+ * recovery. Mirrors the fields centrifuge-js v5 sets on resubscribe
4
+ * (see `SubscribedContext` in `centrifuge/build/types.d.ts`).
5
+ */
6
+ export interface RecoveryContext {
7
+ /** subscription is recoverable – server has history for this channel. */
8
+ recoverable?: boolean;
9
+ /** true when this `subscribed` followed a recovery attempt (a reconnect). */
10
+ wasRecovering?: boolean;
11
+ /** whether the recovery attempt restored the full missed stream. */
12
+ recovered?: boolean;
13
+ }
14
+ /**
15
+ * Returns true when a resubscribe tried to recover missed publications and
16
+ * failed — i.e. there is a gap the client could not fill, so the consumer
17
+ * must resync full state to avoid staying stale.
18
+ */
19
+ export declare function shouldResync(ctx: RecoveryContext): boolean;
20
+ /**
21
+ * Returns true when the server explicitly reports the channel as
22
+ * non-recoverable. In that case exact replay is impossible (no history
23
+ * configured) and only the resync fallback can prevent event loss.
24
+ */
25
+ export declare function isUnrecoverableChannel(ctx: RecoveryContext): boolean;
26
+ //# sourceMappingURL=centrifugeRecovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"centrifugeRecovery.d.ts","sourceRoot":"","sources":["../../src/util/centrifugeRecovery.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC5B,yEAAyE;IACzE,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,6EAA6E;IAC7E,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,oEAAoE;IACpE,SAAS,CAAC,EAAE,OAAO,CAAA;CACtB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAE1D;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAEpE"}
@@ -0,0 +1,18 @@
1
+ import type { Centrifuge, Subscription, SubscriptionOptions } from 'centrifuge';
2
+ /**
3
+ * Returns the existing Centrifuge subscription for `channel`, or creates one if
4
+ * none is registered yet. `centrifuge.newSubscription` throws if a subscription
5
+ * for the channel already exists, so callers that may subscribe to the same
6
+ * channel more than once (e.g. a card briefly mounted twice during a tree
7
+ * rebuild) must dedupe via `getSubscription` first — this helper does that.
8
+ *
9
+ * `createdHere` is `true` when this call allocated the subscription, so the
10
+ * caller knows it owns teardown (`unsubscribe` + `removeSubscription`); when a
11
+ * subscription is reused, the caller should only remove its own listeners and
12
+ * leave the subscription for its original owner.
13
+ */
14
+ export declare function getOrCreateSubscription(centrifuge: Pick<Centrifuge, 'getSubscription' | 'newSubscription'>, channel: string, options?: Partial<SubscriptionOptions>): {
15
+ subscription: Subscription;
16
+ createdHere: boolean;
17
+ };
18
+ //# sourceMappingURL=centrifugeSubscription.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"centrifugeSubscription.d.ts","sourceRoot":"","sources":["../../src/util/centrifugeSubscription.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAE/E;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACnC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,iBAAiB,GAAG,iBAAiB,CAAC,EACnE,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GACvC;IAAE,YAAY,EAAE,YAAY,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAStD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@swarm.ing/pieui",
3
- "version": "2.1.5",
3
+ "version": "2.1.7",
4
4
  "description": "A React component library featuring PieCard component",
5
5
  "repository": {
6
6
  "type": "git",