@swarm.ing/pieui 3.0.9 → 3.0.11
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/cli.js +212 -79
- package/dist/code/commands/registry.d.ts.map +1 -1
- package/dist/components/PieMaxRoot/index.d.ts.map +1 -1
- package/dist/components/PieRoot/index.d.ts.map +1 -1
- package/dist/components/PieRoot/types/index.d.ts +19 -0
- package/dist/components/PieRoot/types/index.d.ts.map +1 -1
- package/dist/components/PieTelegramRoot/index.d.ts.map +1 -1
- package/dist/components/index.esm.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +2 -2
- package/dist/index.js +2 -2
- package/dist/max/index.esm.js +1 -1
- package/dist/max/index.js +1 -1
- package/dist/native/index.d.ts +1 -1
- package/dist/native/index.d.ts.map +1 -1
- package/dist/native/index.esm.js +2 -2
- package/dist/native/index.js +2 -2
- package/dist/telegram/index.esm.js +1 -1
- package/dist/telegram/index.js +1 -1
- package/dist/tests/contentRequest.test.d.ts +16 -0
- package/dist/tests/contentRequest.test.d.ts.map +1 -0
- package/dist/util/ajaxCommonUtils.d.ts +29 -6
- package/dist/util/ajaxCommonUtils.d.ts.map +1 -1
- package/dist/util/contentRequest.d.ts +62 -0
- package/dist/util/contentRequest.d.ts.map +1 -0
- package/package.json +1 -1
package/dist/native/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
var gZ=Object.create;var{getPrototypeOf:pZ,defineProperty:U$,getOwnPropertyNames:EJ,getOwnPropertyDescriptor:cZ}=Object,RJ=Object.prototype.hasOwnProperty;var dZ=($,J,Z)=>{Z=$!=null?gZ(pZ($)):{};let X=J||!$||!$.__esModule?U$(Z,"default",{value:$,enumerable:!0}):Z;for(let Y of EJ($))if(!RJ.call(X,Y))U$(X,Y,{get:()=>$[Y],enumerable:!0});return X},jJ=new WeakMap,uZ=($)=>{var J=jJ.get($),Z;if(J)return J;if(J=U$({},"__esModule",{value:!0}),$&&typeof $==="object"||typeof $==="function")EJ($).map((X)=>!RJ.call(J,X)&&U$(J,X,{get:()=>$[X],enumerable:!(Z=cZ($,X))||Z.enumerable}));return jJ.set($,J),J};var lZ=($,J)=>{for(var Z in J)U$($,Z,{get:J[Z],enumerable:!0,configurable:!0,set:(X)=>J[Z]=()=>X})};var S0={};lZ(S0,{usePieEmit:()=>aJ,useAjaxSubmits:()=>BZ,useAjaxSubmit:()=>_Z,unregisterComponent:()=>CJ,trackLazy:()=>y$,submitGlobalForm:()=>CZ,setNativeField:()=>i,resetNativeClientSources:()=>JZ,registry:()=>g,registerPieComponent:()=>F$,registerMultipleComponents:()=>SJ,readNativeField:()=>v$,readAjaxKeyAsync:()=>MJ,readAjaxKey:()=>FJ,preloadComponent:()=>TJ,prefetchLazyComponents:()=>gJ,pieName:()=>fZ,parseDepName:()=>A$,hasComponent:()=>fJ,getRegistrySize:()=>mJ,getRegistryEntry:()=>$$,getNativeClientConfig:()=>y,getLazyComponentNames:()=>KJ,getEmitter:()=>s,getComponentMeta:()=>hJ,getAllRegisteredComponents:()=>vJ,discoverAjaxEndpoints:()=>OJ,configureNativeClientSources:()=>$Z,clearNativeField:()=>a,UnionCard:()=>ZJ,UIRendererContext:()=>b,UILoading:()=>QJ,UI:()=>N,SocketIOContext:()=>h,SessionStorageCard:()=>a$,SequenceCard:()=>u$,PieRoot:()=>SZ,PieNativeRoot:()=>kZ,PieConfigContext:()=>l,PieCard:()=>A,PieBaseRoot:()=>bZ,PIEBREAK:()=>C$,OneOfCard:()=>s$,MittContext:()=>v,IOEventsCard:()=>r$,HiddenCard:()=>o$,HTMLEmbedCard:()=>e$,FallbackContext:()=>j,DeviceStorageCard:()=>i$,CentrifugeIOContext:()=>f,BoxCard:()=>c$,AutoRedirectCard:()=>$J,AjaxGroupCard:()=>XJ});module.exports=uZ(S0);var yJ=require("react"),t=new Map;function kJ($,J){return J.catch(()=>{if(t.get($)===J)t.delete($)}),t.set($,J),J}function y$($,J){return yJ.lazy(()=>{if(t.has(J))return t.get(J);return kJ(J,$().then((Z)=>Z))})}var bJ=async($,J)=>{if(!J)return;if(t.has($))return t.get($);return kJ($,J().then((Z)=>Z))};var qJ=globalThis,O=($,J)=>{let Z=Symbol.for($);if(!(Z in qJ))qJ[Z]=J();return qJ[Z]};var g=O("@swarm.ing/pieui:component-registry",()=>new Map),sZ=($)=>{if(!$.name)throw Error("Component registration requires a name");if(!$.component&&!$.loader)throw Error(`Component "${$.name}" requires component or loader`);let J={name:$.name,component:$.component,loader:$.loader,metadata:$.metadata,fallback:$.fallback,isLazy:!1};if(!J.component&&J.loader)J.component=y$(J.loader,$.name),J.isLazy=!0;return J};function F$($){let J=sZ($);return g.set(J.name,J),J.component}var SJ=($)=>{$.forEach((J)=>F$(J))},CJ=($)=>{g.delete($)},fJ=($)=>{return g.has($)},hJ=($)=>{return g.get($)?.metadata},$$=($)=>{return g.get($)},vJ=()=>{return Array.from(g.keys())},mJ=()=>{return g.size},KJ=()=>Array.from(g.values()).filter(($)=>$.isLazy&&typeof $.loader==="function").map(($)=>$.name),TJ=($)=>{let J=g.get($);if(!J?.isLazy||typeof J.loader!=="function")return;return bJ($,J.loader)},xJ=!1,gJ=()=>{if(xJ||typeof window>"u")return;xJ=!0;let $=navigator.connection;if($?.saveData)return;if($?.effectiveType&&["slow-2g","2g"].includes($.effectiveType))return;let J=KJ(),Z="requestIdleCallback"in window?(Y)=>window.requestIdleCallback(Y,{timeout:2000}):(Y)=>window.setTimeout(Y,300),X=(Y)=>{if(Y>=J.length)return;Z(()=>{Promise.resolve().then(()=>TJ(J[Y])).catch(()=>{}).finally(()=>X(Y+1))})};X(0)};var AJ=require("react"),G$=require("react-native");var S=require("react");var k$=require("react");var l=O("@swarm.ing/pieui:context:pieConfig",()=>k$.createContext(null)),o=()=>{let $=k$.useContext(l);if(!$)throw Error("usePieConfig must be used within PieConfigProvider");return $},e=()=>{let{apiServer:$}=o();return $},b$=e,J$=()=>{let{centrifugeServer:$}=o();return $};var p=()=>{let{enableRenderingLog:$}=o();return $},pJ=p;var x$=()=>{let{onLinkLost:$}=o();return $},S$=()=>{let{onLinkRestored:$}=o();return $},C$="__piedemo__";var dJ=require("react"),DJ=require("centrifuge");var cJ=O("@swarm.ing/pieui:centrifuge-cache",()=>new Map),Z$=($,J)=>{if(!J)return null;let Z=`${$}::${J}`,X=cJ.get(Z);if(X)return X;async function Y(){let z=await fetch($+"api/centrifuge/gen_token",{credentials:"include"});if(!z.ok){if(z.status===401||z.status===403)throw new DJ.Centrifuge.UnauthorizedError("Backend is not answering");throw Error(`Unexpected status code ${z.status}`)}return(await z.json()).token}let W=new DJ.Centrifuge(J,{getToken:Y});return cJ.set(Z,W),W},oZ=O("@swarm.ing/pieui:context:centrifuge",()=>dJ.createContext(null)),f=oZ;var lJ=require("socket.io-client"),sJ=require("react");var uJ=O("@swarm.ing/pieui:socket-cache",()=>new Map),X$=($)=>{let J=uJ.get($);if(J)return J;let Z=lJ.io($,{autoConnect:!1,transports:["websocket"]});return uJ.set($,Z),Z},iZ=O("@swarm.ing/pieui:context:socket",()=>sJ.createContext(null)),h=iZ;var oJ=dZ(require("mitt")),Y$=require("react");function s(){return O("@swarm.ing/pieui:mitt-emitter",()=>oJ.default())}var iJ=O("@swarm.ing/pieui:context:mitt",()=>Y$.createContext(null));function aJ($){let J=Y$.useContext(iJ);return Y$.useCallback((Z,X)=>{(J??s()).emit(`pie${Z}_${$}`,X)},[$,J])}var v=iJ;function nJ($){return $.wasRecovering===!0&&$.recovered===!1}function rJ($){return $.recoverable===!1}function tJ($,J,Z){let X=$.getSubscription(J);if(X)return{subscription:X,createdHere:!1};return{subscription:$.newSubscription(J,Z),createdHere:!0}}var aZ=($)=>{let J=document.cookie?document.cookie.split(";"):[];for(let Z of J){let X=Z.indexOf("=");if((X===-1?Z:Z.slice(0,X)).trim()===$){let W=X===-1?"":Z.slice(X+1).trim();try{return decodeURIComponent(W)}catch{return W}}}return null},nZ={isClient(){return typeof window<"u"&&typeof document<"u"},readSid(){return typeof window>"u"?void 0:window.sid},setSid($){if(typeof window<"u")window.sid=$},readWebStorage($,J){return($==="local"?window.localStorage:window.sessionStorage).getItem(J)},readCookie:aZ,readUrlParams($){return new URLSearchParams(window.location.search).getAll($)},readDomInput($){let J=document.getElementsByName($);if(!J.length)return null;let Z=J[0];if(Z instanceof HTMLInputElement){if(Z.type==="file"&&Z.files)return Array.from(Z.files);return[Z.value]}if(Z instanceof HTMLTextAreaElement)return[Z.value];return[]},submitGlobalForm(){if(typeof document>"u")return;let $=document.getElementById("piedata_global_form");$&&$.submit()}},eJ=nZ;var f$={};function $Z($){f$={...f$,...$}}function y(){return f$}function JZ(){f$={}}var h$=new Map,i=($,J)=>{h$.set($,J)},a=($)=>{h$.delete($)},v$=($)=>{return h$.has($)?h$.get($):null};var ZZ,rZ={isClient(){return!0},readSid(){return ZZ},setSid($){ZZ=$},readWebStorage($,J){let Z=y(),X=$==="local"?Z.storage:Z.sessionStorage;return X?X.getItem(J):null},async readWebStorageAsync($,J){let Z=y(),X=$==="local"?Z.asyncStorage:Z.asyncSessionStorage;if(X)return X.getItem(J);let Y=$==="local"?Z.storage:Z.sessionStorage;return Y?Y.getItem(J):null},readCookie($){let J=y();return J.getCookie?J.getCookie($):null},readUrlParams($){let J=y();return J.getRouteParams?J.getRouteParams($):[]},readDomInput($){let J=y();return J.getInput?J.getInput($):v$($)},submitGlobalForm(){y().submitForm?.()}},XZ=rZ;var tZ=typeof navigator<"u"&&navigator.product==="ReactNative",eZ=tZ?XZ:eJ,w=eZ;var M$=O("@swarm.ing/pieui:sid-state",()=>({promise:null,resolve:null}));function YZ(){M$.resolve?.()}function VJ(){if(!w.isClient())return Promise.resolve();if(w.readSid()!==void 0)return Promise.resolve();if(!M$.promise)M$.promise=new Promise(($)=>{M$.resolve=()=>{$()}});return M$.promise}var UJ=require("react");var $0=["localStorage","sessionStorage","cookie","url","telegram:cloud","telegram:secure"],J0=new Set(["telegram:cloud","telegram:secure"]),O$=new Map,WZ=($,J)=>{O$.set($,J)},zZ=($)=>{O$.delete($)},GZ=($="piedata_global_form")=>{let J;if(typeof $==="string"){if(typeof document>"u")return;J=document.getElementById($)}else J=$;if(!J)return;let Z=J.ownerDocument;for(let X of Array.from(J.getElementsByTagName("input")))if(X.getAttribute("data-pie-stored")!==null)X.remove();for(let[X,Y]of O$){let W=Y();if(W instanceof Promise)continue;for(let z of W){if(typeof z!=="string")continue;let Q=Z.createElement("input");Q.type="hidden",Q.name=X,Q.value=z,Q.setAttribute("data-pie-stored","1"),J.appendChild(Q)}}},A$=($)=>{if($==="sid")return{source:"sid",key:"sid"};for(let J of $0){let Z=J+":";if($.startsWith(Z))return{source:J,key:$.slice(Z.length)}}return{source:"dom",key:$}},FJ=($,J=!1)=>{let{source:Z,key:X}=A$($);if(Z==="sid"){let z=w.readSid();if(!z)throw Error("SocketIO isn't initialized properly");return[z]}if(Z==="localStorage"||Z==="sessionStorage")try{let z=w.readWebStorage(Z==="localStorage"?"local":"session",X);if(z===null){if(J)console.warn(`No ${Z} value found for key ${X}`);return[]}return[z]}catch(z){if(J)console.warn(`Failed to read ${Z} key ${X}:`,z);return[]}if(Z==="cookie"){let z=w.readCookie(X);if(z===null){if(J)console.warn(`No cookie found for key ${X}`);return[]}return[z]}if(Z==="url"){let z=w.readUrlParams(X);if(!z.length&&J)console.warn(`No URL query param found for key ${X}`);return z}if(J0.has(Z)){if(J)console.warn(`Source ${Z} is async; use readAjaxKeyAsync (readAjaxKey returns [])`);return[]}let Y=O$.get(X);if(Y){let z=Y();if(z instanceof Promise){if(J)console.warn(`stored resolver for ${X} is async; use readAjaxKeyAsync (readAjaxKey returns [])`);return[]}return z}let W=w.readDomInput(X);if(W===null){if(J)console.warn(`No input found with name ${X}`);return[]}return W},Z0=($,J,Z)=>{let X=window.Telegram?.WebApp,Y=$==="telegram:cloud"?X?.CloudStorage:X?.SecureStorage,W=$==="telegram:cloud"?"Telegram CloudStorage":"Telegram SecureStorage";if(!Y){if(Z)console.warn(`${W} is not available`);return Promise.resolve([])}return new Promise((z)=>{try{Y.getItem(J,(Q,G)=>{if(Q){if(Z)console.warn(`Failed to read ${W} key ${J}:`,Q);z([]);return}if(G==null||G===""){if(Z)console.warn(`No ${W} value found for key ${J}`);z([]);return}z([G])})}catch(Q){if(Z)console.warn(`Failed to read ${W} key ${J}:`,Q);z([])}})},MJ=async($,J=!1)=>{let{source:Z,key:X}=A$($);if(Z==="telegram:cloud"||Z==="telegram:secure")return Z0(Z,X,J);if((Z==="localStorage"||Z==="sessionStorage")&&w.readWebStorageAsync)try{let Y=await w.readWebStorageAsync(Z==="localStorage"?"local":"session",X);if(Y===null){if(J)console.warn(`No ${Z} value found for key ${X}`);return[]}return[Y]}catch(Y){if(J)console.warn(`Failed to read ${Z} key ${X}:`,Y);return[]}if(Z==="dom"){let Y=O$.get(X);if(Y)return Y()}return FJ($,J)},QZ=($,J={},Z=[],X,Y)=>{let W=Y?.renderingLogEnabled??!1,z=Y?.timeout,Q=Y?.retryPolicy,G=Q?.maxRetries??0,_=Q?.baseDelay??1000,B=Q?.retryOn??[502,503,504];if(W)console.log("Registering AJAX: ",X,J,Z);return async(F={})=>{if(!w.isClient()){if(W)console.warn("getAjaxSubmit called on server, skipping DOM-dependent logic");return}let K=Y?.apiServer;if(!K){if(W)console.warn("AJAX skipped: apiServer is missing");return}if(!X||!$){if(W)console.warn("AJAX skipped: pathname or setUiAjaxConfiguration is missing");return}if(Z.includes("sid"))await VJ();let D=new FormData;for(let[q,M]of Object.entries({...J,...F}))D.append(q,M);for(let q of Z){let{key:M}=A$(q);for(let I of await MJ(q,W))D.append(M,I)}let P=K+"api/ajax_content"+X;$(null);let V;for(let q=0;q<=G;q++){if(q>0){let T=_*2**(q-1);if(W)console.log(`AJAX retry ${q}/${G} after ${T}ms`);await new Promise((H)=>setTimeout(H,T))}let M=z!=null?new AbortController:null,I=M&&setTimeout(()=>M.abort(),z);try{let T=await fetch(P,{method:"POST",body:D,signal:M?.signal});if(I)clearTimeout(I);if(!T.ok&&B.includes(T.status)&&q<G){V=Error(`HTTP ${T.status}`);continue}let U=(T.headers.get("content-type")||"").includes("application/json");if(!!T.body?.getReader&&!U){let C=T.body.getReader(),R$=new TextDecoder,d="";while(!0){let{done:u,value:hZ}=await C.read();if(u)break;d+=R$.decode(hZ,{stream:!0});let NJ=d.split(`
|
|
3
|
-
`);d=NJ.pop()??"";for(let vZ of NJ){let HJ=vZ.trim();if(!HJ)continue;try{let mZ=JSON.parse(HJ);$([mZ])}catch{if(W)console.warn("Failed to parse streamed line:",HJ)}}}if(d.trim())try{let u=JSON.parse(d);$([u])}catch{if(W)console.warn("Failed to parse final streamed line:",d)}return{}}else{let C=await T.json();return $(C),C}}catch(T){if(I)clearTimeout(I);if(V=T,q<G)continue;if(W)console.error("AJAX request failed:",T);return $(null),T}}if(W)console.error("AJAX request failed after retries:",V);return $(null),V}},_Z=($,J={},Z=[],X,Y)=>{let{apiServer:W,enableRenderingLog:z}=o(),Q=JSON.stringify(J),G=JSON.stringify(Z),_=JSON.stringify(Y);return UJ.useMemo(()=>QZ($,J,Z,X,{apiServer:W,renderingLogEnabled:z,timeout:Y?.timeout,retryPolicy:Y?.retryPolicy}),[$,Q,G,X,W,z,_])},OJ=($={})=>{let J=[];for(let Z of Object.keys($??{})){let X=null;if(Z==="pathname")X="default";else if(Z.endsWith("Pathname"))X=Z.slice(0,-8);if(X===null)continue;let Y=X==="default"?"":X;J.push({key:X,pathname:$[Z],depsNames:$[Y?`${Y}DepsNames`:"depsNames"]??[],kwargs:$[Y?`${Y}Kwargs`:"kwargs"]??{}})}return J},BZ=($={},J,Z)=>{let{apiServer:X,enableRenderingLog:Y}=o(),W=JSON.stringify($??{}),z=JSON.stringify(Z);return UJ.useMemo(()=>{let Q={};for(let G of OJ($??{}))Q[G.key]=QZ(J,G.kwargs,G.depsNames,G.pathname,{apiServer:X,renderingLogEnabled:Y,timeout:Z?.timeout,retryPolicy:Z?.retryPolicy});return Q},[W,J,X,Y,z])};var W$=require("react/jsx-runtime"),X0=({card:$,data:J,children:Z,useSocketioSupport:X=!1,useCentrifugeSupport:Y=!1,useMittSupport:W=!1,centrifugeChannel:z=void 0,methods:Q=void 0,stored:G=void 0,onResync:_=void 0})=>{let B=pJ(),F=S.useRef(Q);F.current=Q;let K=S.useRef(_);K.current=_;let D=S.useRef(G);D.current=G;let P=typeof G==="function";if(S.useEffect(()=>{if(!P)return;let I=J.name;return WZ(I,()=>[JSON.stringify(D.current())]),()=>zZ(I)},[P,J.name]),B)console.log("[PieCard] Rendering card:",$),console.log("[PieCard] Card data:",J),console.log("[PieCard] Component name:",J?.name),console.log("[PieCard] Real-time support:",{socketio:X,centrifuge:Y,mitt:W,centrifugeChannel:z}),console.log("[PieCard] Methods:",Q?Object.keys(Q):"none"),console.log("[PieCard] Has children:",!!Z);let V=S.useContext(h),q=S.useContext(f),M=S.useContext(v);if(S.useEffect(()=>{if(!V||!X||!F.current||!J.name){if(B&&X)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!V,useSocketioSupport:X,hasMethods:!!F.current,hasDataName:!!J?.name});return}let T=Object.keys(F.current??{}).map((H)=>{let U=`pie${H}_${J.name}`;if(B)console.log(`[PieCard] Socket.IO registering event: ${U}`);let x=(C)=>{F.current?.[H]?.(C)};return V.on(U,x),[U,x]});return()=>{T.forEach(([H,U])=>{if(B)console.log(`[PieCard] Socket.IO unregistering event: ${H}`);V.off(H,U)})}},[V,J.name,X]),S.useEffect(()=>{if(!q||!Y||!z||!J.name){if(B&&Y)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!q,useCentrifugeSupport:Y,hasCentrifugeChannel:!!z,hasMethods:!!F.current,hasDataName:!!J?.name});return}let T=Object.keys(F.current??{}).map((H)=>{let U=`pie${H}_${J.name}_${z}`;if(B)console.log(`[PieCard] Centrifuge subscribing to channel: ${U}`);let{subscription:x,createdHere:C}=tJ(q,U,{recoverable:!0,positioned:!0}),R$=(u)=>{if(B)console.log(`[PieCard] Centrifuge received data on ${U}:`,u.data);F.current?.[H]?.(u.data)},d=(u)=>{if(rJ(u))console.warn(`[PieCard] Centrifuge channel ${U} is not `+"recoverable — enable history on the server "+"namespace for exact replay; relying on resync fallback only.");if(nJ(u)){if(B)console.log(`[PieCard] Centrifuge recovery gap on ${U}; requesting resync`);K.current?.({channel:U,reason:"gap"})}};return x.on("publication",R$),x.on("subscribed",d),x.subscribe(),{subscription:x,createdHere:C,onPublication:R$,onSubscribed:d}});return()=>{T.forEach(({subscription:H,createdHere:U,onPublication:x,onSubscribed:C})=>{if(B)console.log("[PieCard] Centrifuge unsubscribing from channel");if(H.off("publication",x),H.off("subscribed",C),U)H.unsubscribe(),q.removeSubscription(H)})}},[q,z,J.name,Y]),S.useEffect(()=>{if(!M||!W||!J.name){if(B&&W)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!M,useMittSupport:W,hasMethods:!!F.current,hasDataName:!!J?.name});return}let I=Object.keys(F.current??{}),T={};return I.forEach((H)=>{let U=`pie${H}_${J.name}`,x=(C)=>{if(B)console.log(`[PieCard] Mitt registering event: ${U}`);F.current?.[H]?.(C)};T[U]=x,M.on(U,x)}),()=>{Object.entries(T).forEach(([H,U])=>{if(B)console.log(`[PieCard] Mitt unregistering event: ${H}`);M.off(H,U)})}},[M,J.name,W]),B)console.log("[PieCard] Rendering complete, returning children");if(G!==void 0&&!P)return W$.jsxs(W$.Fragment,{children:[W$.jsx("input",{type:"hidden",name:J.name,value:JSON.stringify(G)}),Z]});return Z},A=X0;var I$=require("react");var HZ=require("react");var m$=require("react/jsx-runtime"),Y0=O("@swarm.ing/pieui:context:fallback",()=>HZ.createContext(m$.jsx(m$.Fragment,{}))),j=Y0;var qZ=require("react");var W0=O("@swarm.ing/pieui:context:lazyError",()=>qZ.createContext(void 0)),c=W0;var g$=require("react"),KZ=require("react/jsx-runtime"),z0=2,G0=400;class z$ extends g$.Component{state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch($){if(this.props.onError?.($),this.state.attempt<z0){let J=G0*(this.state.attempt+1);this.timer=setTimeout(()=>{this.setState((Z)=>({failed:!1,attempt:Z.attempt+1}))},J)}}componentDidUpdate($){if($.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 KZ.jsx(g$.Suspense,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}var p$=require("react/jsx-runtime");function Q0({uiConfig:$,setUiAjaxConfiguration:J}){let Z=I$.useContext(j),X=I$.useContext(c),Y=p();if(Y)console.log("[UI] Rendering component:",$.card),console.log("[UI] Component data:",$.data),console.log("[UI] Component content:",$.content),console.log("[UI] Has setUiAjaxConfiguration:",!!J);let W=$$($.card);if(!W?.component){if(Y)console.warn(`[UI] Component not found in registry: ${$.card}`),console.log("[UI] Returning fallback component");return Z}if(Y)console.log("[UI] Found component in registry:",{name:W.name,isLazy:W.isLazy,hasMetadata:!!W.metadata});let z=W.component,Q=p$.jsx(z,{data:$.data,content:$.content,setUiAjaxConfiguration:J});if(W.isLazy){if(Y)console.log("[UI] Rendering lazy component with Suspense:",W.name);return p$.jsx(z$,{name:W.name,fallback:W.fallback?p$.jsx(W.fallback,{}):Z,onError:X,children:Q})}if(Y)console.log("[UI] Rendering component directly:",W.name);return Q}var N=I$.memo(Q0);var TZ=require("react");var _0=O("@swarm.ing/pieui:context:navigate",()=>TZ.createContext(void 0)),m=_0;var DZ=require("react");var B0=O("@swarm.ing/pieui:context:uiRenderer",()=>DZ.createContext(null)),b=B0;var P$=require("react/jsx-runtime"),H0=($)=>/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test($),q0=({data:$,content:J,setUiAjaxConfiguration:Z})=>{let{name:X,url:Y,sx:W}=$,z=AJ.useContext(m),Q=AJ.useContext(b)??N,G=()=>{if(!Y)return;if(H0(Y))G$.Linking.openURL(Y).catch(()=>{});else z?.(Y)},_=P$.jsx(Q,{setUiAjaxConfiguration:Z,uiConfig:J});return P$.jsx(A,{card:X,data:$,children:Y?P$.jsx(G$.Pressable,{onPress:G,style:W,children:_}):P$.jsx(G$.View,{style:W,children:_})})},c$=q0;var VZ=require("react"),UZ=require("react-native");var d$=require("react/jsx-runtime"),K0=({data:$,content:J,setUiAjaxConfiguration:Z})=>{let{name:X,sx:Y}=$,W=VZ.useContext(b)??N;return d$.jsx(A,{card:X,data:$,children:d$.jsx(UZ.View,{style:Y,children:J.map((z,Q)=>d$.jsx(W,{uiConfig:z,setUiAjaxConfiguration:Z},`children-${Q}`))})})},u$=K0;var FZ=require("react"),MZ=require("react-native");var l$=require("react/jsx-runtime"),T0=({data:$,content:J,setUiAjaxConfiguration:Z})=>{let{name:X,sx:Y}=$,W=FZ.useContext(b)??N;return l$.jsx(A,{card:X,data:$,children:l$.jsx(MZ.View,{style:Y,children:J.map((z,Q)=>l$.jsx(W,{uiConfig:z,setUiAjaxConfiguration:Z},`children-${Q}`))})})},s$=T0;var w$=require("react");var OZ=require("react/jsx-runtime"),D0=({data:$})=>{let{name:J,value:Z,useSocketioSupport:X,useCentrifugeSupport:Y,useMittSupport:W,centrifugeChannel:z}=$,[Q,G]=w$.useState(Z);return w$.useEffect(()=>{G(Z)},[Z]),w$.useEffect(()=>{return i(J,[Q]),()=>a(J)},[J,Q]),OZ.jsx(A,{card:"HiddenCard",data:$,useSocketioSupport:X,useCentrifugeSupport:Y,useMittSupport:W,centrifugeChannel:z,methods:{update:({value:_})=>{G(_)}}})},o$=D0;var L$=require("react");var AZ=require("react/jsx-runtime"),V0=({data:$})=>{let{name:J,key:Z,value:X,useSocketioSupport:Y,useCentrifugeSupport:W,useMittSupport:z,centrifugeChannel:Q}=$,[G,_]=L$.useState(X);return L$.useEffect(()=>{_(X)},[X]),L$.useEffect(()=>{return y().storage?.setItem?.(Z,G),i(J,[G]),()=>a(J)},[Z,J,G]),AZ.jsx(A,{card:"DeviceStorageCard",data:$,useSocketioSupport:Y,useCentrifugeSupport:W,useMittSupport:z,centrifugeChannel:Q,methods:{update:({value:B})=>{_(B)},remove:()=>{y().storage?.removeItem?.(Z),_("")}}})},i$=V0;var N$=require("react");var IZ=require("react/jsx-runtime"),U0=({data:$})=>{let{name:J,key:Z,value:X,useSocketioSupport:Y,useCentrifugeSupport:W,useMittSupport:z,centrifugeChannel:Q}=$,[G,_]=N$.useState(X);return N$.useEffect(()=>{_(X)},[X]),N$.useEffect(()=>{return y().sessionStorage?.setItem?.(Z,G),i(J,[G]),()=>a(J)},[Z,J,G]),IZ.jsx(A,{card:"SessionStorageCard",data:$,useSocketioSupport:Y,useCentrifugeSupport:W,useMittSupport:z,centrifugeChannel:Q,methods:{update:({value:B})=>{_(B)},remove:()=>{y().sessionStorage?.removeItem?.(Z),_("")}}})},a$=U0;var Q$=require("react"),n$=require("react-native");var PZ=require("react/jsx-runtime"),F0=($)=>/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test($),M0=({data:$})=>{let{useCentrifugeSupport:J,useSocketioSupport:Z,useMittSupport:X,centrifugeChannel:Y}=$,W=Q$.useContext(m),z=Q$.useRef(W);z.current=W;let Q=Q$.useMemo(()=>{let G=(_)=>{if(!_)return;if(F0(_))n$.Linking.openURL(_).catch(()=>{});else z.current?.(_)};return{alert:(_)=>n$.Alert.alert(String(_.title??""),String(_.message??"")),log:(_)=>console.log("Log event",_),push:(_)=>console.warn("[IOEventsCard] push notifications are not supported on native",_?.title),redirect:(_)=>G(_.to),reload:(_)=>G(_.to)}},[]);return PZ.jsx(A,{card:"IOEventsCard",data:$,useCentrifugeSupport:J,useSocketioSupport:Z,useMittSupport:X,centrifugeChannel:Y,methods:Q})},r$=M0;var t$=require("react"),wZ=require("react-native");var IJ=require("react/jsx-runtime"),O0=($)=>($??"").replace(/<[^>]*>/g,"").replace(/ /g," ").replace(/\s+/g," ").trim(),A0=({data:$})=>{let{html:J,useSocketioSupport:Z,useCentrifugeSupport:X,useMittSupport:Y,centrifugeChannel:W}=$,[z,Q]=t$.useState(J);return t$.useEffect(()=>{Q(J)},[J]),IJ.jsx(A,{card:"HTMLEmbedCard",data:$,methods:{update:(G)=>Q(G.value)},useCentrifugeSupport:X,useSocketioSupport:Z,useMittSupport:Y,centrifugeChannel:W,children:IJ.jsx(wZ.Text,{children:O0(z)})})},e$=A0;var j$=require("react"),LZ=require("react-native");var JJ=require("react/jsx-runtime"),I0=({data:$})=>{let{url:J}=$,Z=j$.useContext(m),X=j$.useContext(j);return j$.useEffect(()=>{if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(J))LZ.Linking.openURL(J).catch(()=>{});else Z?.(J)},[J,Z]),JJ.jsx(JJ.Fragment,{children:X})},$J=I0;var NZ=require("react");var PJ=require("react/jsx-runtime"),P0=({data:$,content:J,setUiAjaxConfiguration:Z})=>{let{name:X}=$,Y=NZ.useContext(b)??N;return PJ.jsx(A,{card:X,data:$,children:J.map((W,z)=>{return PJ.jsx(Y,{uiConfig:W,setUiAjaxConfiguration:Z},`children-${z}`)})})},ZJ=P0;var k=require("react");var wJ=require("react/jsx-runtime"),w0=({data:$,content:J})=>{let{useLoader:Z,noReturn:X,returnType:Y,useSocketioSupport:W,useCentrifugeSupport:z,useMittSupport:Q,centrifugeChannel:G}=$,_=k.useContext(j),B=k.useContext(b)??N,[F,K]=k.useState(!1),[D,P]=k.useState(null),V=k.useRef(J),q=k.useContext(v),M=k.useCallback((H)=>{if(H===null)K(!0);else if(K(!1),!X)V.current=H;if(!X)P(H)},[X]),I=k.useCallback((H)=>{V.current=H.content,P(H.content)},[]),T=k.useCallback((H)=>{if(H===null)K(!0);else if(K(!1),!X)for(let U of H)q?.emit(U.name,U.data)},[X,q]);if(k.useEffect(()=>{P(J),K(!1)},[J]),!D&&Z)return _;return wJ.jsx(A,{card:"AjaxGroupCard",data:$,methods:{changeContent:I},useSocketioSupport:W,useCentrifugeSupport:z,useMittSupport:Q,centrifugeChannel:G,children:wJ.jsx(B,{uiConfig:D??V.current,setUiAjaxConfiguration:Y==="events"?T:M})})},XJ=w0;var L0=[{name:"BoxCard",component:c$},{name:"SequenceCard",component:u$},{name:"OneOfCard",component:s$},{name:"HiddenCard",component:o$},{name:"DeviceStorageCard",component:i$},{name:"SessionStorageCard",component:a$},{name:"IOEventsCard",component:r$},{name:"HTMLEmbedCard",component:e$},{name:"AutoRedirectCard",component:$J},{name:"UnionCard",component:ZJ},{name:"AjaxGroupCard",component:XJ}];for(let $ of L0)F$($);var q$=require("react"),K$=require("@tanstack/react-query"),RZ=require("axios-date-transformer"),yZ=require("react-native");var n=require("react");var zJ=require("react"),YJ=new Map,WJ=new Map;function GJ($,J){let Z=`${$}::${J}`,X=$?YJ.get(Z):void 0,[Y,W]=zJ.useState(X??null);return zJ.useEffect(()=>{if(!$)return;if(YJ.has(Z)){W(YJ.get(Z));return}let z=WJ.get(Z);if(!z)z=fetch($+`api/support/${J}`,{method:"GET"}).then((G)=>G.json()).then((G)=>{return YJ.set(Z,G),WJ.delete(Z),G}).catch((G)=>{throw WJ.delete(Z),G}),WJ.set(Z,z);let Q=!1;return z.then((G)=>{if(!Q)W(G)}).catch(()=>{}),()=>{Q=!0}},[$,J,Z]),Y}function _$($,J){if(J==="up")return{state:"up",signal:$==="down"?"restored":null};return{state:"down",signal:$==="up"?"lost":null}}var N0=({children:$})=>{let J=n.useContext(h),Z=b$(),X=GJ(Z,"socketIO"),Y=x$(),W=S$(),z=n.useRef(Y);z.current=Y;let Q=n.useRef(W);Q.current=W;let G=n.useRef("initial"),_=(B)=>{if(w.isClient())w.setSid(B.sid),YZ(),console.log(`SocketIO initialized: ${w.readSid()}`)};return n.useEffect(()=>{if(!J||!X)return;let B=()=>{let{state:K,signal:D}=_$(G.current,"up");if(G.current=K,D==="restored")Q.current?.("socketio");console.log("SocketIO connected")},F=(K)=>{if(console.log(`SocketIO disconnected: ${K}`),J.connect(),K==="io client disconnect")return;let{state:D,signal:P}=_$(G.current,"down");if(G.current=D,P==="lost")z.current?.("socketio",K)};return J.on("pieinit",_),J.on("connect",B),J.on("disconnect",F),J.connect(),()=>{J.off("pieinit",_),J.off("connect",B),J.off("disconnect",F),J.disconnect()}},[J,X]),$},B$=N0;var r=require("react");var j0=({children:$})=>{let J=r.useContext(f),Z=b$(),X=GJ(Z,"centrifuge"),Y=x$(),W=S$(),z=r.useRef(Y);z.current=Y;let Q=r.useRef(W);Q.current=W;let G=r.useRef("initial");return r.useEffect(()=>{if(!J||!X)return;let _=(K)=>{let{state:D,signal:P}=_$(G.current,"down");if(G.current=D,P==="lost")z.current?.("centrifuge",K)},B=()=>{let{state:K,signal:D}=_$(G.current,"up");if(G.current=K,D==="restored")Q.current?.("centrifuge");console.log("Centrifuge connected")},F=(K)=>{console.log("Centrifuge disconnected:",K),_(K)};return J.on("connecting",_),J.on("connected",B),J.on("disconnected",F),J.connect(),()=>{J.off("connecting",_),J.off("connected",B),J.off("disconnected",F),J.disconnect()}},[J,X]),$},H$=j0;var LJ=require("react");var E$=require("react/jsx-runtime");function jZ({uiConfig:$,setUiAjaxConfiguration:J}){let Z=LJ.useContext(j),X=LJ.useContext(c),Y=p();if(Y)console.log("[UILoading] Rendering fallback for:",$.card),console.log("[UILoading] Component data:",$.data),console.log("[UILoading] Component content:",$.content),console.log("[UILoading] Has setUiAjaxConfiguration:",!!J);let W=$$($.card);if(!W?.component){if(Y)console.warn(`[UILoading] Component not found in registry: ${$.card}`),console.log("[UILoading] Returning fallback component");return Z}if(Y)console.log("[UILoading] Found component in registry:",{name:W.name,isLazy:W.isLazy,hasMetadata:!!W.metadata,hasFallback:!!W.fallback});if(W.fallback){if(Y)console.log("[UILoading] Rendering fallback for:",W.name);let G=W.fallback;return E$.jsx(G,{})}if(Y)console.log("[UILoading] No fallback, rendering full component:",W.name);let z=W.component,Q=E$.jsx(b.Provider,{value:jZ,children:E$.jsx(z,{data:$.data,content:$.content,setUiAjaxConfiguration:J})});if(W.isLazy)return E$.jsx(z$,{name:W.name,fallback:Z,onError:X,children:Q});return Q}var QJ=jZ;var EZ=require("react/jsx-runtime");function _J($,J,Z){if(!J)return Z;let X=$.replace(/^\//,""),Y=J[X];if(!Y)return Z;return EZ.jsx(QJ,{uiConfig:Y})}var E=require("react/jsx-runtime"),E0=({location:$,fallback:J,piecache:Z,onError:X,queryOptions:Y})=>{let W=e(),z=J$(),Q=p(),G=q$.useMemo(()=>RZ.createAxiosDateTransformer({baseURL:W||""}),[W]),_=q$.useMemo(()=>s(),[]),B=q$.useMemo(()=>W?X$(W):null,[W]),F=q$.useMemo(()=>W?Z$(W,z):null,[W,z]),{data:K,isLoading:D,error:P}=K$.useQuery({queryKey:["uiConfig",$.pathname+$.search,W],enabled:!!W,queryFn:async()=>{let q=new URLSearchParams($.search);q.set("__pieroot",yZ.Platform.OS);let M="/api/content"+$.pathname+"?"+q.toString();if(Q)console.log("[PieNativeRoot] Fetching UI configuration from:",M);let I=await G.get(M,{headers:{"Content-type":"application/json"},withCredentials:!0});if(Q)console.log("[PieNativeRoot] Received UI configuration:",I.data);return I.data},staleTime:1/0,gcTime:1/0,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,retry:!0,retryDelay:(q)=>Math.min(1000*2**q,30000),...Y}),V=_J($.pathname,Z,J);if(!W)return V??null;if(P){if(Q)console.error("[PieNativeRoot] Error fetching UI configuration:",P);return X?.(P),V}if(D||!K)return V;return E.jsx(v.Provider,{value:_,children:E.jsx(h.Provider,{value:B,children:E.jsx(f.Provider,{value:F,children:E.jsx(j.Provider,{value:J??E.jsx(E.Fragment,{}),children:E.jsx(B$,{children:E.jsx(H$,{children:E.jsx(N,{uiConfig:K})})})})})})})},R0=($)=>{let J=q$.useMemo(()=>new K$.QueryClient,[]),Z=$.queryClient??J;return E.jsx(m.Provider,{value:$.onNavigate,children:E.jsx(l.Provider,{value:$.config,children:E.jsx(c.Provider,{value:$.onError,children:E.jsx(K$.QueryClientProvider,{client:Z,children:E.jsx(E0,{...$})})})})})},kZ=R0;var T$=require("react"),BJ=require("@tanstack/react-query");var R=require("react/jsx-runtime"),y0=({location:$,fallback:J,children:Z,disableGlobalForm:X})=>{let Y=e(),W=J$(),z=p(),Q=T$.useMemo(()=>s(),[]),G=T$.useMemo(()=>Y?X$(Y):null,[Y]),_=T$.useMemo(()=>Y?Z$(Y,W):null,[Y,W]);if(z)console.log("[PieRoot] Rendering with location:",$),console.log("[PieRoot] API_SERVER:",Y),console.log("[PieRoot] CENTRIFUGE_SERVER:",W),console.log("[PieRoot] Fallback provided:",!!J);return R.jsx(v.Provider,{value:Q,children:R.jsx(h.Provider,{value:G,children:R.jsx(f.Provider,{value:_,children:R.jsx(j.Provider,{value:J??R.jsx(R.Fragment,{}),children:R.jsx(B$,{children:R.jsx(H$,{children:X?Z:R.jsx("form",{id:"piedata_global_form",action:Y+"api/process"+$.pathname,method:"post",encType:"multipart/form-data",children:Z})})})})})})})},k0=($)=>{let[J]=T$.useState(()=>new BJ.QueryClient),Z=$.queryClient??J;return R.jsx(m.Provider,{value:$.onNavigate,children:R.jsx(l.Provider,{value:$.config,children:R.jsx(c.Provider,{value:$.onError,children:R.jsx(BJ.QueryClientProvider,{client:Z,children:R.jsx(y0,{...$})})})})})},bZ=k0;var D$=require("react"),V$=require("@tanstack/react-query");var xZ=require("axios-date-transformer");var L=require("react/jsx-runtime"),b0=({location:$,fallback:J,piecache:Z,onError:X,queryOptions:Y,disableGlobalForm:W})=>{let z=e(),Q=J$(),G=p(),_=D$.useMemo(()=>xZ.createAxiosDateTransformer({baseURL:z||""}),[z]),B=D$.useMemo(()=>s(),[]),F=D$.useMemo(()=>z?X$(z):null,[z]),K=D$.useMemo(()=>z?Z$(z,Q):null,[z,Q]),{data:D,isLoading:P,error:V}=V$.useQuery({queryKey:["uiConfig",$.pathname+$.search,z],enabled:!!z,queryFn:async()=>{let M=new URLSearchParams($.search);M.set("__pieroot","web");let I="/api/content"+$.pathname+"?"+M.toString();if(G)console.log("[PieRoot] Fetching UI configuration from:",I);let T=await _.get(I,{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:",T.data);return T.data},staleTime:1/0,gcTime:1/0,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,retry:!0,retryDelay:(M)=>Math.min(1000*2**M,30000),...Y}),q=_J($.pathname,Z,J);if(!z)return q??null;if(G)console.log("[PieRoot] Rendering with location:",$),console.log("[PieRoot] API_SERVER:",z),console.log("[PieRoot] CENTRIFUGE_SERVER:",Q),console.log("[PieRoot] Fallback provided:",!!J),console.log("[PieRoot] Piecache provided:",!!Z);if(V){if(G)console.error("[PieRoot] Error fetching UI configuration:",V),console.error("[PieRoot] Error details:",{message:V.message,status:V.response?.status,data:V.response?.data});return X?.(V),q}if(P||!D){if(G)console.log("[PieRoot] Loading state:",{isLoading:P,hasUiConfiguration:!!D});return q}if(G)console.log("[PieRoot] UI configuration loaded successfully:",D),console.log("[PieRoot] Rendering UI with configuration");return L.jsx(v.Provider,{value:B,children:L.jsx(h.Provider,{value:F,children:L.jsx(f.Provider,{value:K,children:L.jsx(j.Provider,{value:J??L.jsx(L.Fragment,{}),children:L.jsx(B$,{children:L.jsx(H$,{children:W?L.jsx(N,{uiConfig:D}):L.jsx("form",{id:"piedata_global_form",action:z+"api/process"+$.pathname,method:"post",encType:"multipart/form-data",children:L.jsx(N,{uiConfig:D})})})})})})})})},x0=($)=>{let J=D$.useMemo(()=>new V$.QueryClient,[]),Z=$.queryClient??J;return L.jsx(m.Provider,{value:$.onNavigate,children:L.jsx(l.Provider,{value:$.config,children:L.jsx(c.Provider,{value:$.onError,children:L.jsx(V$.QueryClientProvider,{client:Z,children:L.jsx(b0,{...$})})})})})},SZ=x0;var CZ=()=>{GZ(),w.submitGlobalForm()};var fZ=($,J)=>`${$}${C$}${J}`;
|
|
2
|
+
var cZ=Object.create;var{getPrototypeOf:uZ,defineProperty:U$,getOwnPropertyNames:RJ,getOwnPropertyDescriptor:lZ}=Object,yJ=Object.prototype.hasOwnProperty;var sZ=($,J,Z)=>{Z=$!=null?cZ(uZ($)):{};let X=J||!$||!$.__esModule?U$(Z,"default",{value:$,enumerable:!0}):Z;for(let Y of RJ($))if(!yJ.call(X,Y))U$(X,Y,{get:()=>$[Y],enumerable:!0});return X},EJ=new WeakMap,oZ=($)=>{var J=EJ.get($),Z;if(J)return J;if(J=U$({},"__esModule",{value:!0}),$&&typeof $==="object"||typeof $==="function")RJ($).map((X)=>!yJ.call(J,X)&&U$(J,X,{get:()=>$[X],enumerable:!(Z=lZ($,X))||Z.enumerable}));return EJ.set($,J),J};var iZ=($,J)=>{for(var Z in J)U$($,Z,{get:J[Z],enumerable:!0,configurable:!0,set:(X)=>J[Z]=()=>X})};var g0={};iZ(g0,{usePieEmit:()=>nJ,useAjaxSubmits:()=>HZ,useAjaxSubmit:()=>BZ,unregisterComponent:()=>fJ,trackLazy:()=>y$,submitGlobalForm:()=>vZ,setNativeField:()=>o,resetNativeClientSources:()=>ZZ,registry:()=>g,registerPieComponent:()=>F$,registerMultipleComponents:()=>CJ,readNativeField:()=>v$,readAjaxKeyAsync:()=>AJ,readAjaxKey:()=>MJ,preloadComponent:()=>VJ,prefetchLazyComponents:()=>pJ,pieName:()=>mZ,parseDepName:()=>O$,hasComponent:()=>hJ,getRegistrySize:()=>gJ,getRegistryEntry:()=>$$,getNativeClientConfig:()=>y,getLazyComponentNames:()=>TJ,getEmitter:()=>u,getComponentMeta:()=>vJ,getAllRegisteredComponents:()=>mJ,discoverAjaxEndpoints:()=>OJ,configureNativeClientSources:()=>JZ,clearNativeField:()=>i,UnionCard:()=>ZJ,UIRendererContext:()=>x,UILoading:()=>QJ,UI:()=>N,SocketIOContext:()=>h,SessionStorageCard:()=>a$,SequenceCard:()=>u$,PieRoot:()=>hZ,PieNativeRoot:()=>bZ,PieConfigContext:()=>c,PieCard:()=>O,PieBaseRoot:()=>xZ,PIEBREAK:()=>C$,OneOfCard:()=>s$,MittContext:()=>v,IOEventsCard:()=>r$,HiddenCard:()=>o$,HTMLEmbedCard:()=>e$,FallbackContext:()=>j,DeviceStorageCard:()=>i$,CentrifugeIOContext:()=>f,BoxCard:()=>d$,AutoRedirectCard:()=>$J,AjaxGroupCard:()=>XJ});module.exports=oZ(g0);var kJ=require("react"),t=new Map;function bJ($,J){return J.catch(()=>{if(t.get($)===J)t.delete($)}),t.set($,J),J}function y$($,J){return kJ.lazy(()=>{if(t.has(J))return t.get(J);return bJ(J,$().then((Z)=>Z))})}var xJ=async($,J)=>{if(!J)return;if(t.has($))return t.get($);return bJ($,J().then((Z)=>Z))};var KJ=globalThis,M=($,J)=>{let Z=Symbol.for($);if(!(Z in KJ))KJ[Z]=J();return KJ[Z]};var g=M("@swarm.ing/pieui:component-registry",()=>new Map),aZ=($)=>{if(!$.name)throw Error("Component registration requires a name");if(!$.component&&!$.loader)throw Error(`Component "${$.name}" requires component or loader`);let J={name:$.name,component:$.component,loader:$.loader,metadata:$.metadata,fallback:$.fallback,isLazy:!1};if(!J.component&&J.loader)J.component=y$(J.loader,$.name),J.isLazy=!0;return J};function F$($){let J=aZ($);return g.set(J.name,J),J.component}var CJ=($)=>{$.forEach((J)=>F$(J))},fJ=($)=>{g.delete($)},hJ=($)=>{return g.has($)},vJ=($)=>{return g.get($)?.metadata},$$=($)=>{return g.get($)},mJ=()=>{return Array.from(g.keys())},gJ=()=>{return g.size},TJ=()=>Array.from(g.values()).filter(($)=>$.isLazy&&typeof $.loader==="function").map(($)=>$.name),VJ=($)=>{let J=g.get($);if(!J?.isLazy||typeof J.loader!=="function")return;return xJ($,J.loader)},SJ=!1,pJ=()=>{if(SJ||typeof window>"u")return;SJ=!0;let $=navigator.connection;if($?.saveData)return;if($?.effectiveType&&["slow-2g","2g"].includes($.effectiveType))return;let J=TJ(),Z="requestIdleCallback"in window?(Y)=>window.requestIdleCallback(Y,{timeout:2000}):(Y)=>window.setTimeout(Y,300),X=(Y)=>{if(Y>=J.length)return;Z(()=>{Promise.resolve().then(()=>VJ(J[Y])).catch(()=>{}).finally(()=>X(Y+1))})};X(0)};var IJ=require("react"),G$=require("react-native");var S=require("react");var k$=require("react");var c=M("@swarm.ing/pieui:context:pieConfig",()=>k$.createContext(null)),s=()=>{let $=k$.useContext(c);if(!$)throw Error("usePieConfig must be used within PieConfigProvider");return $},e=()=>{let{apiServer:$}=s();return $},b$=e,J$=()=>{let{centrifugeServer:$}=s();return $};var p=()=>{let{enableRenderingLog:$}=s();return $},dJ=p;var x$=()=>{let{onLinkLost:$}=s();return $},S$=()=>{let{onLinkRestored:$}=s();return $},C$="__piedemo__";var uJ=require("react"),DJ=require("centrifuge");var cJ=M("@swarm.ing/pieui:centrifuge-cache",()=>new Map),Z$=($,J)=>{if(!J)return null;let Z=`${$}::${J}`,X=cJ.get(Z);if(X)return X;async function Y(){let z=await fetch($+"api/centrifuge/gen_token",{credentials:"include"});if(!z.ok){if(z.status===401||z.status===403)throw new DJ.Centrifuge.UnauthorizedError("Backend is not answering");throw Error(`Unexpected status code ${z.status}`)}return(await z.json()).token}let W=new DJ.Centrifuge(J,{getToken:Y});return cJ.set(Z,W),W},nZ=M("@swarm.ing/pieui:context:centrifuge",()=>uJ.createContext(null)),f=nZ;var sJ=require("socket.io-client"),oJ=require("react");var lJ=M("@swarm.ing/pieui:socket-cache",()=>new Map),X$=($)=>{let J=lJ.get($);if(J)return J;let Z=sJ.io($,{autoConnect:!1,transports:["websocket"]});return lJ.set($,Z),Z},rZ=M("@swarm.ing/pieui:context:socket",()=>oJ.createContext(null)),h=rZ;var iJ=sZ(require("mitt")),Y$=require("react");function u(){return M("@swarm.ing/pieui:mitt-emitter",()=>iJ.default())}var aJ=M("@swarm.ing/pieui:context:mitt",()=>Y$.createContext(null));function nJ($){let J=Y$.useContext(aJ);return Y$.useCallback((Z,X)=>{(J??u()).emit(`pie${Z}_${$}`,X)},[$,J])}var v=aJ;function rJ($){return $.wasRecovering===!0&&$.recovered===!1}function tJ($){return $.recoverable===!1}function eJ($,J,Z){let X=$.getSubscription(J);if(X)return{subscription:X,createdHere:!1};return{subscription:$.newSubscription(J,Z),createdHere:!0}}var tZ=($)=>{let J=document.cookie?document.cookie.split(";"):[];for(let Z of J){let X=Z.indexOf("=");if((X===-1?Z:Z.slice(0,X)).trim()===$){let W=X===-1?"":Z.slice(X+1).trim();try{return decodeURIComponent(W)}catch{return W}}}return null},eZ={isClient(){return typeof window<"u"&&typeof document<"u"},readSid(){return typeof window>"u"?void 0:window.sid},setSid($){if(typeof window<"u")window.sid=$},readWebStorage($,J){return($==="local"?window.localStorage:window.sessionStorage).getItem(J)},readCookie:tZ,readUrlParams($){return new URLSearchParams(window.location.search).getAll($)},readDomInput($){let J=document.getElementsByName($);if(!J.length)return null;let Z=J[0];if(Z instanceof HTMLInputElement){if(Z.type==="file"&&Z.files)return Array.from(Z.files);return[Z.value]}if(Z instanceof HTMLTextAreaElement)return[Z.value];return[]},submitGlobalForm(){if(typeof document>"u")return;let $=document.getElementById("piedata_global_form");$&&$.submit()}},$Z=eZ;var f$={};function JZ($){f$={...f$,...$}}function y(){return f$}function ZZ(){f$={}}var h$=new Map,o=($,J)=>{h$.set($,J)},i=($)=>{h$.delete($)},v$=($)=>{return h$.has($)?h$.get($):null};var XZ,$0={isClient(){return!0},readSid(){return XZ},setSid($){XZ=$},readWebStorage($,J){let Z=y(),X=$==="local"?Z.storage:Z.sessionStorage;return X?X.getItem(J):null},async readWebStorageAsync($,J){let Z=y(),X=$==="local"?Z.asyncStorage:Z.asyncSessionStorage;if(X)return X.getItem(J);let Y=$==="local"?Z.storage:Z.sessionStorage;return Y?Y.getItem(J):null},readCookie($){let J=y();return J.getCookie?J.getCookie($):null},readUrlParams($){let J=y();return J.getRouteParams?J.getRouteParams($):[]},readDomInput($){let J=y();return J.getInput?J.getInput($):v$($)},submitGlobalForm(){y().submitForm?.()}},YZ=$0;var J0=typeof navigator<"u"&&navigator.product==="ReactNative",Z0=J0?YZ:$Z,w=Z0;var M$=M("@swarm.ing/pieui:sid-state",()=>({promise:null,resolve:null}));function WZ(){M$.resolve?.()}function UJ(){if(!w.isClient())return Promise.resolve();if(w.readSid()!==void 0)return Promise.resolve();if(!M$.promise)M$.promise=new Promise(($)=>{M$.resolve=()=>{$()}});return M$.promise}var FJ=require("react");var X0=["localStorage","sessionStorage","cookie","url","telegram:cloud","telegram:secure"],Y0=new Set(["telegram:cloud","telegram:secure"]),A$=new Map,zZ=($,J)=>{A$.set($,J)},GZ=($)=>{A$.delete($)},QZ=($="piedata_global_form")=>{let J;if(typeof $==="string"){if(typeof document>"u")return;J=document.getElementById($)}else J=$;if(!J)return;let Z=J.ownerDocument;for(let X of Array.from(J.getElementsByTagName("input")))if(X.getAttribute("data-pie-stored")!==null)X.remove();for(let[X,Y]of A$){let W=Y();if(W instanceof Promise)continue;for(let z of W){if(typeof z!=="string")continue;let G=Z.createElement("input");G.type="hidden",G.name=X,G.value=z,G.setAttribute("data-pie-stored","1"),J.appendChild(G)}}},O$=($)=>{if($==="sid")return{source:"sid",key:"sid"};for(let J of X0){let Z=J+":";if($.startsWith(Z))return{source:J,key:$.slice(Z.length)}}return{source:"dom",key:$}},MJ=($,J=!1)=>{let{source:Z,key:X}=O$($);if(Z==="sid"){let z=w.readSid();if(!z)throw Error("SocketIO isn't initialized properly");return[z]}if(Z==="localStorage"||Z==="sessionStorage")try{let z=w.readWebStorage(Z==="localStorage"?"local":"session",X);if(z===null){if(J)console.warn(`No ${Z} value found for key ${X}`);return[]}return[z]}catch(z){if(J)console.warn(`Failed to read ${Z} key ${X}:`,z);return[]}if(Z==="cookie"){let z=w.readCookie(X);if(z===null){if(J)console.warn(`No cookie found for key ${X}`);return[]}return[z]}if(Z==="url"){let z=w.readUrlParams(X);if(!z.length&&J)console.warn(`No URL query param found for key ${X}`);return z}if(Y0.has(Z)){if(J)console.warn(`Source ${Z} is async; use readAjaxKeyAsync (readAjaxKey returns [])`);return[]}let Y=A$.get(X);if(Y){let z=Y();if(z instanceof Promise){if(J)console.warn(`stored resolver for ${X} is async; use readAjaxKeyAsync (readAjaxKey returns [])`);return[]}return z}let W=w.readDomInput(X);if(W===null){if(J)console.warn(`No input found with name ${X}`);return[]}return W},W0=($,J,Z)=>{let X=window.Telegram?.WebApp,Y=$==="telegram:cloud"?X?.CloudStorage:X?.SecureStorage,W=$==="telegram:cloud"?"Telegram CloudStorage":"Telegram SecureStorage";if(!Y){if(Z)console.warn(`${W} is not available`);return Promise.resolve([])}return new Promise((z)=>{try{Y.getItem(J,(G,Q)=>{if(G){if(Z)console.warn(`Failed to read ${W} key ${J}:`,G);z([]);return}if(Q==null||Q===""){if(Z)console.warn(`No ${W} value found for key ${J}`);z([]);return}z([Q])})}catch(G){if(Z)console.warn(`Failed to read ${W} key ${J}:`,G);z([])}})},AJ=async($,J=!1)=>{let{source:Z,key:X}=O$($);if(Z==="telegram:cloud"||Z==="telegram:secure")return W0(Z,X,J);if((Z==="localStorage"||Z==="sessionStorage")&&w.readWebStorageAsync)try{let Y=await w.readWebStorageAsync(Z==="localStorage"?"local":"session",X);if(Y===null){if(J)console.warn(`No ${Z} value found for key ${X}`);return[]}return[Y]}catch(Y){if(J)console.warn(`Failed to read ${Z} key ${X}:`,Y);return[]}if(Z==="dom"){let Y=A$.get(X);if(Y)return Y()}return MJ($,J)},z0=($)=>{if(!$)return[];if(Array.isArray($))return $.map(([J,Z])=>[String(J),String(Z)]);if(typeof $.forEach==="function"){let J=[];return $.forEach((Z,X)=>J.push([X,Z])),J}return Object.entries($)},G0=($)=>{let J=$.filter(Boolean);if(J.length===0)return;if(J.length===1)return J[0];let Z=AbortSignal.any;if(typeof Z==="function")return Z.call(AbortSignal,J);let X=new AbortController;for(let Y of J){if(Y.aborted){X.abort(Y.reason);break}Y.addEventListener("abort",()=>X.abort(Y.reason),{once:!0})}return X.signal},Q0=($,J,Z)=>{let X={method:"POST",credentials:"include"},Y={},W=[J];for(let G of Z){if(!G)continue;let{headers:Q,signal:_,body:H,...T}=G;Object.assign(X,T);for(let[q,A]of z0(Q))Y[q.toLowerCase()]=A;W.push(_)}if(X.body=$,Object.keys(Y).length>0)X.headers=Y;let z=G0(W);if(z)X.signal=z;return X},_Z=($,J={},Z=[],X,Y)=>{let W=Y?.renderingLogEnabled??!1,z=Y?.timeout,G=Y?.retryPolicy,Q=G?.maxRetries??0,_=G?.baseDelay??1000,H=G?.retryOn??[502,503,504];if(W)console.log("Registering AJAX: ",X,J,Z);return async(T={},q)=>{if(!w.isClient()){if(W)console.warn("getAjaxSubmit called on server, skipping DOM-dependent logic");return}let A=Y?.apiServer;if(!A){if(W)console.warn("AJAX skipped: apiServer is missing");return}if(!X||!$){if(W)console.warn("AJAX skipped: pathname or setUiAjaxConfiguration is missing");return}if(Z.includes("sid"))await UJ();let D=new FormData;for(let[K,F]of Object.entries({...J,...T}))D.append(K,F);for(let K of Z){let{key:F}=O$(K);for(let P of await AJ(K,W))D.append(F,P)}let I=A+"api/ajax_content"+X;$(null);let U;for(let K=0;K<=Q;K++){if(K>0){let B=_*2**(K-1);if(W)console.log(`AJAX retry ${K}/${Q} after ${B}ms`);await new Promise((V)=>setTimeout(V,B))}let F=z!=null?new AbortController:null,P=F&&setTimeout(()=>F.abort(),z);try{let B=await fetch(I,Q0(D,F?.signal,[Y?.fetchOptions,q]));if(P)clearTimeout(P);if(!B.ok&&H.includes(B.status)&&K<Q){U=Error(`HTTP ${B.status}`);continue}let b=(B.headers.get("content-type")||"").includes("application/json");if(!!B.body?.getReader&&!b){let r=B.body.getReader(),R$=new TextDecoder,C="";while(!0){let{done:HJ,value:gZ}=await r.read();if(HJ)break;C+=R$.decode(gZ,{stream:!0});let jJ=C.split(`
|
|
3
|
+
`);C=jJ.pop()??"";for(let pZ of jJ){let qJ=pZ.trim();if(!qJ)continue;try{let dZ=JSON.parse(qJ);$([dZ])}catch{if(W)console.warn("Failed to parse streamed line:",qJ)}}}if(C.trim())try{let HJ=JSON.parse(C);$([HJ])}catch{if(W)console.warn("Failed to parse final streamed line:",C)}return{}}else{let r=await B.json();return $(r),r}}catch(B){if(P)clearTimeout(P);if(U=B,K<Q)continue;if(W)console.error("AJAX request failed:",B);return $(null),B}}if(W)console.error("AJAX request failed after retries:",U);return $(null),U}},BZ=($,J={},Z=[],X,Y)=>{let{apiServer:W,enableRenderingLog:z}=s(),G=JSON.stringify(J),Q=JSON.stringify(Z),_=JSON.stringify(Y);return FJ.useMemo(()=>_Z($,J,Z,X,{apiServer:W,renderingLogEnabled:z,timeout:Y?.timeout,retryPolicy:Y?.retryPolicy,fetchOptions:Y?.fetchOptions}),[$,G,Q,X,W,z,_])},OJ=($={})=>{let J=[];for(let Z of Object.keys($??{})){let X=null;if(Z==="pathname")X="default";else if(Z.endsWith("Pathname"))X=Z.slice(0,-8);if(X===null)continue;let Y=X==="default"?"":X;J.push({key:X,pathname:$[Z],depsNames:$[Y?`${Y}DepsNames`:"depsNames"]??[],kwargs:$[Y?`${Y}Kwargs`:"kwargs"]??{}})}return J},HZ=($={},J,Z)=>{let{apiServer:X,enableRenderingLog:Y}=s(),W=JSON.stringify($??{}),z=JSON.stringify(Z);return FJ.useMemo(()=>{let G={};for(let Q of OJ($??{}))G[Q.key]=_Z(J,Q.kwargs,Q.depsNames,Q.pathname,{apiServer:X,renderingLogEnabled:Y,timeout:Z?.timeout,retryPolicy:Z?.retryPolicy,fetchOptions:Z?.fetchOptions});return G},[W,J,X,Y,z])};var W$=require("react/jsx-runtime"),_0=({card:$,data:J,children:Z,useSocketioSupport:X=!1,useCentrifugeSupport:Y=!1,useMittSupport:W=!1,centrifugeChannel:z=void 0,methods:G=void 0,stored:Q=void 0,onResync:_=void 0})=>{let H=dJ(),T=S.useRef(G);T.current=G;let q=S.useRef(_);q.current=_;let A=S.useRef(Q);A.current=Q;let D=typeof Q==="function";if(S.useEffect(()=>{if(!D)return;let F=J.name;return zZ(F,()=>[JSON.stringify(A.current())]),()=>GZ(F)},[D,J.name]),H)console.log("[PieCard] Rendering card:",$),console.log("[PieCard] Card data:",J),console.log("[PieCard] Component name:",J?.name),console.log("[PieCard] Real-time support:",{socketio:X,centrifuge:Y,mitt:W,centrifugeChannel:z}),console.log("[PieCard] Methods:",G?Object.keys(G):"none"),console.log("[PieCard] Has children:",!!Z);let I=S.useContext(h),U=S.useContext(f),K=S.useContext(v);if(S.useEffect(()=>{if(!I||!X||!T.current||!J.name){if(H&&X)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!I,useSocketioSupport:X,hasMethods:!!T.current,hasDataName:!!J?.name});return}let P=Object.keys(T.current??{}).map((B)=>{let V=`pie${B}_${J.name}`;if(H)console.log(`[PieCard] Socket.IO registering event: ${V}`);let b=(l)=>{T.current?.[B]?.(l)};return I.on(V,b),[V,b]});return()=>{P.forEach(([B,V])=>{if(H)console.log(`[PieCard] Socket.IO unregistering event: ${B}`);I.off(B,V)})}},[I,J.name,X]),S.useEffect(()=>{if(!U||!Y||!z||!J.name){if(H&&Y)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!U,useCentrifugeSupport:Y,hasCentrifugeChannel:!!z,hasMethods:!!T.current,hasDataName:!!J?.name});return}let P=Object.keys(T.current??{}).map((B)=>{let V=`pie${B}_${J.name}_${z}`;if(H)console.log(`[PieCard] Centrifuge subscribing to channel: ${V}`);let{subscription:b,createdHere:l}=eJ(U,V,{recoverable:!0,positioned:!0}),r=(C)=>{if(H)console.log(`[PieCard] Centrifuge received data on ${V}:`,C.data);T.current?.[B]?.(C.data)},R$=(C)=>{if(tJ(C))console.warn(`[PieCard] Centrifuge channel ${V} is not `+"recoverable — enable history on the server "+"namespace for exact replay; relying on resync fallback only.");if(rJ(C)){if(H)console.log(`[PieCard] Centrifuge recovery gap on ${V}; requesting resync`);q.current?.({channel:V,reason:"gap"})}};return b.on("publication",r),b.on("subscribed",R$),b.subscribe(),{subscription:b,createdHere:l,onPublication:r,onSubscribed:R$}});return()=>{P.forEach(({subscription:B,createdHere:V,onPublication:b,onSubscribed:l})=>{if(H)console.log("[PieCard] Centrifuge unsubscribing from channel");if(B.off("publication",b),B.off("subscribed",l),V)B.unsubscribe(),U.removeSubscription(B)})}},[U,z,J.name,Y]),S.useEffect(()=>{if(!K||!W||!J.name){if(H&&W)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!K,useMittSupport:W,hasMethods:!!T.current,hasDataName:!!J?.name});return}let F=Object.keys(T.current??{}),P={};return F.forEach((B)=>{let V=`pie${B}_${J.name}`,b=(l)=>{if(H)console.log(`[PieCard] Mitt registering event: ${V}`);T.current?.[B]?.(l)};P[V]=b,K.on(V,b)}),()=>{Object.entries(P).forEach(([B,V])=>{if(H)console.log(`[PieCard] Mitt unregistering event: ${B}`);K.off(B,V)})}},[K,J.name,W]),H)console.log("[PieCard] Rendering complete, returning children");if(Q!==void 0&&!D)return W$.jsxs(W$.Fragment,{children:[W$.jsx("input",{type:"hidden",name:J.name,value:JSON.stringify(Q)}),Z]});return Z},O=_0;var I$=require("react");var qZ=require("react");var m$=require("react/jsx-runtime"),B0=M("@swarm.ing/pieui:context:fallback",()=>qZ.createContext(m$.jsx(m$.Fragment,{}))),j=B0;var KZ=require("react");var H0=M("@swarm.ing/pieui:context:lazyError",()=>KZ.createContext(void 0)),d=H0;var g$=require("react"),TZ=require("react/jsx-runtime"),q0=2,K0=400;class z$ extends g$.Component{state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch($){if(this.props.onError?.($),this.state.attempt<q0){let J=K0*(this.state.attempt+1);this.timer=setTimeout(()=>{this.setState((Z)=>({failed:!1,attempt:Z.attempt+1}))},J)}}componentDidUpdate($){if($.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 TZ.jsx(g$.Suspense,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}var p$=require("react/jsx-runtime");function T0({uiConfig:$,setUiAjaxConfiguration:J}){let Z=I$.useContext(j),X=I$.useContext(d),Y=p();if(Y)console.log("[UI] Rendering component:",$.card),console.log("[UI] Component data:",$.data),console.log("[UI] Component content:",$.content),console.log("[UI] Has setUiAjaxConfiguration:",!!J);let W=$$($.card);if(!W?.component){if(Y)console.warn(`[UI] Component not found in registry: ${$.card}`),console.log("[UI] Returning fallback component");return Z}if(Y)console.log("[UI] Found component in registry:",{name:W.name,isLazy:W.isLazy,hasMetadata:!!W.metadata});let z=W.component,G=p$.jsx(z,{data:$.data,content:$.content,setUiAjaxConfiguration:J});if(W.isLazy){if(Y)console.log("[UI] Rendering lazy component with Suspense:",W.name);return p$.jsx(z$,{name:W.name,fallback:W.fallback?p$.jsx(W.fallback,{}):Z,onError:X,children:G})}if(Y)console.log("[UI] Rendering component directly:",W.name);return G}var N=I$.memo(T0);var VZ=require("react");var V0=M("@swarm.ing/pieui:context:navigate",()=>VZ.createContext(void 0)),m=V0;var DZ=require("react");var D0=M("@swarm.ing/pieui:context:uiRenderer",()=>DZ.createContext(null)),x=D0;var P$=require("react/jsx-runtime"),U0=($)=>/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test($),F0=({data:$,content:J,setUiAjaxConfiguration:Z})=>{let{name:X,url:Y,sx:W}=$,z=IJ.useContext(m),G=IJ.useContext(x)??N,Q=()=>{if(!Y)return;if(U0(Y))G$.Linking.openURL(Y).catch(()=>{});else z?.(Y)},_=P$.jsx(G,{setUiAjaxConfiguration:Z,uiConfig:J});return P$.jsx(O,{card:X,data:$,children:Y?P$.jsx(G$.Pressable,{onPress:Q,style:W,children:_}):P$.jsx(G$.View,{style:W,children:_})})},d$=F0;var UZ=require("react"),FZ=require("react-native");var c$=require("react/jsx-runtime"),M0=({data:$,content:J,setUiAjaxConfiguration:Z})=>{let{name:X,sx:Y}=$,W=UZ.useContext(x)??N;return c$.jsx(O,{card:X,data:$,children:c$.jsx(FZ.View,{style:Y,children:J.map((z,G)=>c$.jsx(W,{uiConfig:z,setUiAjaxConfiguration:Z},`children-${G}`))})})},u$=M0;var MZ=require("react"),AZ=require("react-native");var l$=require("react/jsx-runtime"),A0=({data:$,content:J,setUiAjaxConfiguration:Z})=>{let{name:X,sx:Y}=$,W=MZ.useContext(x)??N;return l$.jsx(O,{card:X,data:$,children:l$.jsx(AZ.View,{style:Y,children:J.map((z,G)=>l$.jsx(W,{uiConfig:z,setUiAjaxConfiguration:Z},`children-${G}`))})})},s$=A0;var w$=require("react");var OZ=require("react/jsx-runtime"),O0=({data:$})=>{let{name:J,value:Z,useSocketioSupport:X,useCentrifugeSupport:Y,useMittSupport:W,centrifugeChannel:z}=$,[G,Q]=w$.useState(Z);return w$.useEffect(()=>{Q(Z)},[Z]),w$.useEffect(()=>{return o(J,[G]),()=>i(J)},[J,G]),OZ.jsx(O,{card:"HiddenCard",data:$,useSocketioSupport:X,useCentrifugeSupport:Y,useMittSupport:W,centrifugeChannel:z,methods:{update:({value:_})=>{Q(_)}}})},o$=O0;var L$=require("react");var IZ=require("react/jsx-runtime"),I0=({data:$})=>{let{name:J,key:Z,value:X,useSocketioSupport:Y,useCentrifugeSupport:W,useMittSupport:z,centrifugeChannel:G}=$,[Q,_]=L$.useState(X);return L$.useEffect(()=>{_(X)},[X]),L$.useEffect(()=>{return y().storage?.setItem?.(Z,Q),o(J,[Q]),()=>i(J)},[Z,J,Q]),IZ.jsx(O,{card:"DeviceStorageCard",data:$,useSocketioSupport:Y,useCentrifugeSupport:W,useMittSupport:z,centrifugeChannel:G,methods:{update:({value:H})=>{_(H)},remove:()=>{y().storage?.removeItem?.(Z),_("")}}})},i$=I0;var N$=require("react");var PZ=require("react/jsx-runtime"),P0=({data:$})=>{let{name:J,key:Z,value:X,useSocketioSupport:Y,useCentrifugeSupport:W,useMittSupport:z,centrifugeChannel:G}=$,[Q,_]=N$.useState(X);return N$.useEffect(()=>{_(X)},[X]),N$.useEffect(()=>{return y().sessionStorage?.setItem?.(Z,Q),o(J,[Q]),()=>i(J)},[Z,J,Q]),PZ.jsx(O,{card:"SessionStorageCard",data:$,useSocketioSupport:Y,useCentrifugeSupport:W,useMittSupport:z,centrifugeChannel:G,methods:{update:({value:H})=>{_(H)},remove:()=>{y().sessionStorage?.removeItem?.(Z),_("")}}})},a$=P0;var Q$=require("react"),n$=require("react-native");var wZ=require("react/jsx-runtime"),w0=($)=>/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test($),L0=({data:$})=>{let{useCentrifugeSupport:J,useSocketioSupport:Z,useMittSupport:X,centrifugeChannel:Y}=$,W=Q$.useContext(m),z=Q$.useRef(W);z.current=W;let G=Q$.useMemo(()=>{let Q=(_)=>{if(!_)return;if(w0(_))n$.Linking.openURL(_).catch(()=>{});else z.current?.(_)};return{alert:(_)=>n$.Alert.alert(String(_.title??""),String(_.message??"")),log:(_)=>console.log("Log event",_),push:(_)=>console.warn("[IOEventsCard] push notifications are not supported on native",_?.title),redirect:(_)=>Q(_.to),reload:(_)=>Q(_.to)}},[]);return wZ.jsx(O,{card:"IOEventsCard",data:$,useCentrifugeSupport:J,useSocketioSupport:Z,useMittSupport:X,centrifugeChannel:Y,methods:G})},r$=L0;var t$=require("react"),LZ=require("react-native");var PJ=require("react/jsx-runtime"),N0=($)=>($??"").replace(/<[^>]*>/g,"").replace(/ /g," ").replace(/\s+/g," ").trim(),j0=({data:$})=>{let{html:J,useSocketioSupport:Z,useCentrifugeSupport:X,useMittSupport:Y,centrifugeChannel:W}=$,[z,G]=t$.useState(J);return t$.useEffect(()=>{G(J)},[J]),PJ.jsx(O,{card:"HTMLEmbedCard",data:$,methods:{update:(Q)=>G(Q.value)},useCentrifugeSupport:X,useSocketioSupport:Z,useMittSupport:Y,centrifugeChannel:W,children:PJ.jsx(LZ.Text,{children:N0(z)})})},e$=j0;var j$=require("react"),NZ=require("react-native");var JJ=require("react/jsx-runtime"),E0=({data:$})=>{let{url:J}=$,Z=j$.useContext(m),X=j$.useContext(j);return j$.useEffect(()=>{if(/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(J))NZ.Linking.openURL(J).catch(()=>{});else Z?.(J)},[J,Z]),JJ.jsx(JJ.Fragment,{children:X})},$J=E0;var jZ=require("react");var wJ=require("react/jsx-runtime"),R0=({data:$,content:J,setUiAjaxConfiguration:Z})=>{let{name:X}=$,Y=jZ.useContext(x)??N;return wJ.jsx(O,{card:X,data:$,children:J.map((W,z)=>{return wJ.jsx(Y,{uiConfig:W,setUiAjaxConfiguration:Z},`children-${z}`)})})},ZJ=R0;var k=require("react");var LJ=require("react/jsx-runtime"),y0=({data:$,content:J})=>{let{useLoader:Z,noReturn:X,returnType:Y,useSocketioSupport:W,useCentrifugeSupport:z,useMittSupport:G,centrifugeChannel:Q}=$,_=k.useContext(j),H=k.useContext(x)??N,[T,q]=k.useState(!1),[A,D]=k.useState(null),I=k.useRef(J),U=k.useContext(v),K=k.useCallback((B)=>{if(B===null)q(!0);else if(q(!1),!X)I.current=B;if(!X)D(B)},[X]),F=k.useCallback((B)=>{I.current=B.content,D(B.content)},[]),P=k.useCallback((B)=>{if(B===null)q(!0);else if(q(!1),!X)for(let V of B)U?.emit(V.name,V.data)},[X,U]);if(k.useEffect(()=>{D(J),q(!1)},[J]),!A&&Z)return _;return LJ.jsx(O,{card:"AjaxGroupCard",data:$,methods:{changeContent:F},useSocketioSupport:W,useCentrifugeSupport:z,useMittSupport:G,centrifugeChannel:Q,children:LJ.jsx(H,{uiConfig:A??I.current,setUiAjaxConfiguration:Y==="events"?P:K})})},XJ=y0;var k0=[{name:"BoxCard",component:d$},{name:"SequenceCard",component:u$},{name:"OneOfCard",component:s$},{name:"HiddenCard",component:o$},{name:"DeviceStorageCard",component:i$},{name:"SessionStorageCard",component:a$},{name:"IOEventsCard",component:r$},{name:"HTMLEmbedCard",component:e$},{name:"AutoRedirectCard",component:$J},{name:"UnionCard",component:ZJ},{name:"AjaxGroupCard",component:XJ}];for(let $ of k0)F$($);var q$=require("react"),K$=require("@tanstack/react-query"),yZ=require("axios-date-transformer"),kZ=require("react-native");var a=require("react");var zJ=require("react"),YJ=new Map,WJ=new Map;function GJ($,J){let Z=`${$}::${J}`,X=$?YJ.get(Z):void 0,[Y,W]=zJ.useState(X??null);return zJ.useEffect(()=>{if(!$)return;if(YJ.has(Z)){W(YJ.get(Z));return}let z=WJ.get(Z);if(!z)z=fetch($+`api/support/${J}`,{method:"GET"}).then((Q)=>Q.json()).then((Q)=>{return YJ.set(Z,Q),WJ.delete(Z),Q}).catch((Q)=>{throw WJ.delete(Z),Q}),WJ.set(Z,z);let G=!1;return z.then((Q)=>{if(!G)W(Q)}).catch(()=>{}),()=>{G=!0}},[$,J,Z]),Y}function _$($,J){if(J==="up")return{state:"up",signal:$==="down"?"restored":null};return{state:"down",signal:$==="up"?"lost":null}}var b0=({children:$})=>{let J=a.useContext(h),Z=b$(),X=GJ(Z,"socketIO"),Y=x$(),W=S$(),z=a.useRef(Y);z.current=Y;let G=a.useRef(W);G.current=W;let Q=a.useRef("initial"),_=(H)=>{if(w.isClient())w.setSid(H.sid),WZ(),console.log(`SocketIO initialized: ${w.readSid()}`)};return a.useEffect(()=>{if(!J||!X)return;let H=()=>{let{state:q,signal:A}=_$(Q.current,"up");if(Q.current=q,A==="restored")G.current?.("socketio");console.log("SocketIO connected")},T=(q)=>{if(console.log(`SocketIO disconnected: ${q}`),J.connect(),q==="io client disconnect")return;let{state:A,signal:D}=_$(Q.current,"down");if(Q.current=A,D==="lost")z.current?.("socketio",q)};return J.on("pieinit",_),J.on("connect",H),J.on("disconnect",T),J.connect(),()=>{J.off("pieinit",_),J.off("connect",H),J.off("disconnect",T),J.disconnect()}},[J,X]),$},B$=b0;var n=require("react");var x0=({children:$})=>{let J=n.useContext(f),Z=b$(),X=GJ(Z,"centrifuge"),Y=x$(),W=S$(),z=n.useRef(Y);z.current=Y;let G=n.useRef(W);G.current=W;let Q=n.useRef("initial");return n.useEffect(()=>{if(!J||!X)return;let _=(q)=>{let{state:A,signal:D}=_$(Q.current,"down");if(Q.current=A,D==="lost")z.current?.("centrifuge",q)},H=()=>{let{state:q,signal:A}=_$(Q.current,"up");if(Q.current=q,A==="restored")G.current?.("centrifuge");console.log("Centrifuge connected")},T=(q)=>{console.log("Centrifuge disconnected:",q),_(q)};return J.on("connecting",_),J.on("connected",H),J.on("disconnected",T),J.connect(),()=>{J.off("connecting",_),J.off("connected",H),J.off("disconnected",T),J.disconnect()}},[J,X]),$},H$=x0;var NJ=require("react");var E$=require("react/jsx-runtime");function EZ({uiConfig:$,setUiAjaxConfiguration:J}){let Z=NJ.useContext(j),X=NJ.useContext(d),Y=p();if(Y)console.log("[UILoading] Rendering fallback for:",$.card),console.log("[UILoading] Component data:",$.data),console.log("[UILoading] Component content:",$.content),console.log("[UILoading] Has setUiAjaxConfiguration:",!!J);let W=$$($.card);if(!W?.component){if(Y)console.warn(`[UILoading] Component not found in registry: ${$.card}`),console.log("[UILoading] Returning fallback component");return Z}if(Y)console.log("[UILoading] Found component in registry:",{name:W.name,isLazy:W.isLazy,hasMetadata:!!W.metadata,hasFallback:!!W.fallback});if(W.fallback){if(Y)console.log("[UILoading] Rendering fallback for:",W.name);let Q=W.fallback;return E$.jsx(Q,{})}if(Y)console.log("[UILoading] No fallback, rendering full component:",W.name);let z=W.component,G=E$.jsx(x.Provider,{value:EZ,children:E$.jsx(z,{data:$.data,content:$.content,setUiAjaxConfiguration:J})});if(W.isLazy)return E$.jsx(z$,{name:W.name,fallback:Z,onError:X,children:G});return G}var QJ=EZ;var RZ=require("react/jsx-runtime");function _J($,J,Z){if(!J)return Z;let X=$.replace(/^\//,""),Y=J[X];if(!Y)return Z;return RZ.jsx(QJ,{uiConfig:Y})}var E=require("react/jsx-runtime"),S0=({location:$,fallback:J,piecache:Z,onError:X,queryOptions:Y})=>{let W=e(),z=J$(),G=p(),Q=q$.useMemo(()=>yZ.createAxiosDateTransformer({baseURL:W||""}),[W]),_=q$.useMemo(()=>u(),[]),H=q$.useMemo(()=>W?X$(W):null,[W]),T=q$.useMemo(()=>W?Z$(W,z):null,[W,z]),{data:q,isLoading:A,error:D}=K$.useQuery({queryKey:["uiConfig",$.pathname+$.search,W],enabled:!!W,queryFn:async()=>{let U=new URLSearchParams($.search);U.set("__pieroot",kZ.Platform.OS);let K="/api/content"+$.pathname+"?"+U.toString();if(G)console.log("[PieNativeRoot] Fetching UI configuration from:",K);let F=await Q.get(K,{headers:{"Content-type":"application/json"},withCredentials:!0});if(G)console.log("[PieNativeRoot] Received UI configuration:",F.data);return F.data},staleTime:1/0,gcTime:1/0,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,retry:!0,retryDelay:(U)=>Math.min(1000*2**U,30000),...Y}),I=_J($.pathname,Z,J);if(!W)return I??null;if(D){if(G)console.error("[PieNativeRoot] Error fetching UI configuration:",D);return X?.(D),I}if(A||!q)return I;return E.jsx(v.Provider,{value:_,children:E.jsx(h.Provider,{value:H,children:E.jsx(f.Provider,{value:T,children:E.jsx(j.Provider,{value:J??E.jsx(E.Fragment,{}),children:E.jsx(B$,{children:E.jsx(H$,{children:E.jsx(N,{uiConfig:q})})})})})})})},C0=($)=>{let J=q$.useMemo(()=>new K$.QueryClient,[]),Z=$.queryClient??J;return E.jsx(m.Provider,{value:$.onNavigate,children:E.jsx(c.Provider,{value:$.config,children:E.jsx(d.Provider,{value:$.onError,children:E.jsx(K$.QueryClientProvider,{client:Z,children:E.jsx(S0,{...$})})})})})},bZ=C0;var T$=require("react"),BJ=require("@tanstack/react-query");var R=require("react/jsx-runtime"),f0=({location:$,fallback:J,children:Z,disableGlobalForm:X})=>{let Y=e(),W=J$(),z=p(),G=T$.useMemo(()=>u(),[]),Q=T$.useMemo(()=>Y?X$(Y):null,[Y]),_=T$.useMemo(()=>Y?Z$(Y,W):null,[Y,W]);if(z)console.log("[PieRoot] Rendering with location:",$),console.log("[PieRoot] API_SERVER:",Y),console.log("[PieRoot] CENTRIFUGE_SERVER:",W),console.log("[PieRoot] Fallback provided:",!!J);return R.jsx(v.Provider,{value:G,children:R.jsx(h.Provider,{value:Q,children:R.jsx(f.Provider,{value:_,children:R.jsx(j.Provider,{value:J??R.jsx(R.Fragment,{}),children:R.jsx(B$,{children:R.jsx(H$,{children:X?Z:R.jsx("form",{id:"piedata_global_form",action:Y+"api/process"+$.pathname,method:"post",encType:"multipart/form-data",children:Z})})})})})})})},h0=($)=>{let[J]=T$.useState(()=>new BJ.QueryClient),Z=$.queryClient??J;return R.jsx(m.Provider,{value:$.onNavigate,children:R.jsx(c.Provider,{value:$.config,children:R.jsx(d.Provider,{value:$.onError,children:R.jsx(BJ.QueryClientProvider,{client:Z,children:R.jsx(f0,{...$})})})})})},xZ=h0;var V$=require("react"),D$=require("@tanstack/react-query");var fZ=require("axios-date-transformer");function SZ({apiServer:$,pathname:J,search:Z,root:X,initData:Y}){let W=new URLSearchParams(Z);if(W.set("__pieroot",X),Y)W.set("initData",Y);return`${$.replace(/\/$/,"")}/api/content${J}?${W.toString()}`}async function CZ($,J){if(!$||$.used||$.url!==J)return null;$.used=!0;try{return await $.promise}catch{return null}}var L=require("react/jsx-runtime"),v0=({location:$,fallback:J,piecache:Z,onError:X,queryOptions:Y,configPrefetch:W,disableGlobalForm:z})=>{let G=e(),Q=J$(),_=p(),H=V$.useMemo(()=>fZ.createAxiosDateTransformer({baseURL:G||""}),[G]),T=V$.useMemo(()=>u(),[]),q=V$.useMemo(()=>G?X$(G):null,[G]),A=V$.useMemo(()=>G?Z$(G,Q):null,[G,Q]),{data:D,isLoading:I,error:U}=D$.useQuery({queryKey:["uiConfig",$.pathname+$.search,G],enabled:!!G,queryFn:async()=>{let F=SZ({apiServer:G,pathname:$.pathname,search:$.search,root:"web"}),P=await CZ(W,F);if(P){if(_)console.log("[PieRoot] Using prefetched UI configuration");return P}if(_)console.log("[PieRoot] Fetching UI configuration from:",F);let B=await H.get(F,{withCredentials:!0});if(_)console.log("[PieRoot] Received UI configuration:",B.data);return B.data},staleTime:1/0,gcTime:1/0,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,retry:!0,retryDelay:(F)=>Math.min(1000*2**F,30000),...Y}),K=_J($.pathname,Z,J);if(!G)return K??null;if(_)console.log("[PieRoot] Rendering with location:",$),console.log("[PieRoot] API_SERVER:",G),console.log("[PieRoot] CENTRIFUGE_SERVER:",Q),console.log("[PieRoot] Fallback provided:",!!J),console.log("[PieRoot] Piecache provided:",!!Z);if(U){if(_)console.error("[PieRoot] Error fetching UI configuration:",U),console.error("[PieRoot] Error details:",{message:U.message,status:U.response?.status,data:U.response?.data});return X?.(U),K}if(I||!D){if(_)console.log("[PieRoot] Loading state:",{isLoading:I,hasUiConfiguration:!!D});return K}if(_)console.log("[PieRoot] UI configuration loaded successfully:",D),console.log("[PieRoot] Rendering UI with configuration");return L.jsx(v.Provider,{value:T,children:L.jsx(h.Provider,{value:q,children:L.jsx(f.Provider,{value:A,children:L.jsx(j.Provider,{value:J??L.jsx(L.Fragment,{}),children:L.jsx(B$,{children:L.jsx(H$,{children:z?L.jsx(N,{uiConfig:D}):L.jsx("form",{id:"piedata_global_form",action:G+"api/process"+$.pathname,method:"post",encType:"multipart/form-data",children:L.jsx(N,{uiConfig:D})})})})})})})})},m0=($)=>{let J=V$.useMemo(()=>new D$.QueryClient,[]),Z=$.queryClient??J;return L.jsx(m.Provider,{value:$.onNavigate,children:L.jsx(c.Provider,{value:$.config,children:L.jsx(d.Provider,{value:$.onError,children:L.jsx(D$.QueryClientProvider,{client:Z,children:L.jsx(v0,{...$})})})})})},hZ=m0;var vZ=()=>{QZ(),w.submitGlobalForm()};var mZ=($,J)=>`${$}${C$}${J}`;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import{useMemo as f}from"react";import{QueryClient as cJ,QueryClientProvider as lJ,useQuery as uJ}from"@tanstack/react-query";import o$ from"mitt";import{createContext as i$,useCallback as TZ,useContext as _Z}from"react";var t=globalThis,T=($,J)=>{let Z=Symbol.for($);if(!(Z in t))t[Z]=J();return t[Z]};function Q$(){return T("@swarm.ing/pieui:mitt-emitter",()=>o$())}var a$=T("@swarm.ing/pieui:context:mitt",()=>i$(null));var h=a$;import{io as n$}from"socket.io-client";import{createContext as r$}from"react";var T$=T("@swarm.ing/pieui:socket-cache",()=>new Map),_$=($)=>{let J=T$.get($);if(J)return J;let Z=n$($,{autoConnect:!1,transports:["websocket"]});return T$.set($,Z),Z},t$=T("@swarm.ing/pieui:context:socket",()=>r$(null)),w=t$;import{createContext as e$}from"react";import{Centrifuge as q$}from"centrifuge";var U$=T("@swarm.ing/pieui:centrifuge-cache",()=>new Map),W$=($,J)=>{if(!J)return null;let Z=`${$}::${J}`,X=U$.get(Z);if(X)return X;async function Y(){let z=await fetch($+"api/centrifuge/gen_token",{credentials:"include"});if(!z.ok){if(z.status===401||z.status===403)throw new q$.UnauthorizedError("Backend is not answering");throw Error(`Unexpected status code ${z.status}`)}return(await z.json()).token}let G=new q$(J,{getToken:Y});return U$.set(Z,G),G},$J=T("@swarm.ing/pieui:context:centrifuge",()=>e$(null)),E=$J;import{useContext as qJ,useEffect as UJ,useRef as J$}from"react";import{useEffect as JJ,useState as ZJ}from"react";var m=new Map,g=new Map;function p($,J){let Z=`${$}::${J}`,X=$?m.get(Z):void 0,[Y,G]=ZJ(X??null);return JJ(()=>{if(!$)return;if(m.has(Z)){G(m.get(Z));return}let z=g.get(Z);if(!z)z=fetch($+`api/support/${J}`,{method:"GET"}).then((B)=>B.json()).then((B)=>{return m.set(Z,B),g.delete(Z),B}).catch((B)=>{throw g.delete(Z),B}),g.set(Z,z);let Q=!1;return z.then((B)=>{if(!Q)G(B)}).catch(()=>{}),()=>{Q=!0}},[$,J,Z]),Y}import{createContext as GJ,useContext as XJ}from"react";var e=T("@swarm.ing/pieui:context:pieConfig",()=>GJ(null)),x=()=>{let $=XJ(e);if(!$)throw Error("usePieConfig must be used within PieConfigProvider");return $},$$=()=>{let{apiServer:$}=x();return $},c=$$,F$=()=>{let{centrifugeServer:$}=x();return $};var L=()=>{let{enableRenderingLog:$}=x();return $},V$=L,D$=()=>{let{pageProcessor:$}=x();return $};var l=()=>{let{onLinkLost:$}=x();return $},u=()=>{let{onLinkRestored:$}=x();return $};var YJ=($)=>{let J=document.cookie?document.cookie.split(";"):[];for(let Z of J){let X=Z.indexOf("=");if((X===-1?Z:Z.slice(0,X)).trim()===$){let G=X===-1?"":Z.slice(X+1).trim();try{return decodeURIComponent(G)}catch{return G}}}return null},zJ={isClient(){return typeof window<"u"&&typeof document<"u"},readSid(){return typeof window>"u"?void 0:window.sid},setSid($){if(typeof window<"u")window.sid=$},readWebStorage($,J){return($==="local"?window.localStorage:window.sessionStorage).getItem(J)},readCookie:YJ,readUrlParams($){return new URLSearchParams(window.location.search).getAll($)},readDomInput($){let J=document.getElementsByName($);if(!J.length)return null;let Z=J[0];if(Z instanceof HTMLInputElement){if(Z.type==="file"&&Z.files)return Array.from(Z.files);return[Z.value]}if(Z instanceof HTMLTextAreaElement)return[Z.value];return[]},submitGlobalForm(){if(typeof document>"u")return;let $=document.getElementById("piedata_global_form");$&&$.submit()}},K$=zJ;var BJ={};function R(){return BJ}var M$=new Map;var I$=($)=>{return M$.has($)?M$.get($):null};var O$,HJ={isClient(){return!0},readSid(){return O$},setSid($){O$=$},readWebStorage($,J){let Z=R(),X=$==="local"?Z.storage:Z.sessionStorage;return X?X.getItem(J):null},async readWebStorageAsync($,J){let Z=R(),X=$==="local"?Z.asyncStorage:Z.asyncSessionStorage;if(X)return X.getItem(J);let Y=$==="local"?Z.storage:Z.sessionStorage;return Y?Y.getItem(J):null},readCookie($){let J=R();return J.getCookie?J.getCookie($):null},readUrlParams($){let J=R();return J.getRouteParams?J.getRouteParams($):[]},readDomInput($){let J=R();return J.getInput?J.getInput($):I$($)},submitGlobalForm(){R().submitForm?.()}},P$=HJ;var QJ=typeof navigator<"u"&&navigator.product==="ReactNative",TJ=QJ?P$:K$,d=TJ;var _J=T("@swarm.ing/pieui:sid-state",()=>({promise:null,resolve:null}));function A$(){_J.resolve?.()}function y($,J){if(J==="up")return{state:"up",signal:$==="down"?"restored":null};return{state:"down",signal:$==="up"?"lost":null}}var WJ=({children:$})=>{let J=qJ(w),Z=c(),X=p(Z,"socketIO"),Y=l(),G=u(),z=J$(Y);z.current=Y;let Q=J$(G);Q.current=G;let B=J$("initial"),U=(H)=>{if(d.isClient())d.setSid(H.sid),A$(),console.log(`SocketIO initialized: ${d.readSid()}`)};return UJ(()=>{if(!J||!X)return;let H=()=>{let{state:F,signal:V}=y(B.current,"up");if(B.current=F,V==="restored")Q.current?.("socketio");console.log("SocketIO connected")},W=(F)=>{if(console.log(`SocketIO disconnected: ${F}`),J.connect(),F==="io client disconnect")return;let{state:V,signal:K}=y(B.current,"down");if(B.current=V,K==="lost")z.current?.("socketio",F)};return J.on("pieinit",U),J.on("connect",H),J.on("disconnect",W),J.connect(),()=>{J.off("pieinit",U),J.off("connect",H),J.off("disconnect",W),J.disconnect()}},[J,X]),$},j$=WJ;import{useContext as FJ,useEffect as VJ,useRef as Z$}from"react";var DJ=({children:$})=>{let J=FJ(E),Z=c(),X=p(Z,"centrifuge"),Y=l(),G=u(),z=Z$(Y);z.current=Y;let Q=Z$(G);Q.current=G;let B=Z$("initial");return VJ(()=>{if(!J||!X)return;let U=(F)=>{let{state:V,signal:K}=y(B.current,"down");if(B.current=V,K==="lost")z.current?.("centrifuge",F)},H=()=>{let{state:F,signal:V}=y(B.current,"up");if(B.current=F,V==="restored")Q.current?.("centrifuge");console.log("Centrifuge connected")},W=(F)=>{console.log("Centrifuge disconnected:",F),U(F)};return J.on("connecting",U),J.on("connected",H),J.on("disconnected",W),J.connect(),()=>{J.off("connecting",U),J.off("connected",H),J.off("disconnected",W),J.disconnect()}},[J,X]),$},N$=DJ;import{createContext as KJ}from"react";import{jsx as OJ,Fragment as IJ}from"react/jsx-runtime";var MJ=T("@swarm.ing/pieui:context:fallback",()=>KJ(OJ(IJ,{}))),C=MJ;import{createContext as PJ}from"react";var AJ=T("@swarm.ing/pieui:context:lazyError",()=>PJ(void 0)),b=AJ;import{lazy as jJ}from"react";var S=new Map;function NJ($,J){return J.catch(()=>{if(S.get($)===J)S.delete($)}),S.set($,J),J}function L$($,J){return jJ(()=>{if(S.has(J))return S.get(J);return NJ(J,$().then((Z)=>Z))})}var R$=T("@swarm.ing/pieui:component-registry",()=>new Map),LJ=($)=>{if(!$.name)throw Error("Component registration requires a name");if(!$.component&&!$.loader)throw Error(`Component "${$.name}" requires component or loader`);let J={name:$.name,component:$.component,loader:$.loader,metadata:$.metadata,fallback:$.fallback,isLazy:!1};if(!J.component&&J.loader)J.component=L$(J.loader,$.name),J.isLazy=!0;return J};function s($){let J=LJ($);return R$.set(J.name,J),J.component}var o=($)=>{return R$.get($)};import{useContext as w$,memo as CJ}from"react";import{Component as RJ,Suspense as wJ}from"react";import{jsx as yJ}from"react/jsx-runtime";var EJ=2,xJ=400;class k extends RJ{state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch($){if(this.props.onError?.($),this.state.attempt<EJ){let J=xJ*(this.state.attempt+1);this.timer=setTimeout(()=>{this.setState((Z)=>({failed:!1,attempt:Z.attempt+1}))},J)}}componentDidUpdate($){if($.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 yJ(wJ,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}import{jsx as G$}from"react/jsx-runtime";function bJ({uiConfig:$,setUiAjaxConfiguration:J}){let Z=w$(C),X=w$(b),Y=L();if(Y)console.log("[UI] Rendering component:",$.card),console.log("[UI] Component data:",$.data),console.log("[UI] Component content:",$.content),console.log("[UI] Has setUiAjaxConfiguration:",!!J);let G=o($.card);if(!G?.component){if(Y)console.warn(`[UI] Component not found in registry: ${$.card}`),console.log("[UI] Returning fallback component");return Z}if(Y)console.log("[UI] Found component in registry:",{name:G.name,isLazy:G.isLazy,hasMetadata:!!G.metadata});let z=G.component,Q=G$(z,{data:$.data,content:$.content,setUiAjaxConfiguration:J});if(G.isLazy){if(Y)console.log("[UI] Rendering lazy component with Suspense:",G.name);return G$(k,{name:G.name,fallback:G.fallback?G$(G.fallback,{}):Z,onError:X,children:Q})}if(Y)console.log("[UI] Rendering component directly:",G.name);return Q}var X$=CJ(bJ);import{createAxiosDateTransformer as dJ}from"axios-date-transformer";import{useEffect as kJ,useState as vJ}from"react";var i=({onError:$}={})=>{let[J,Z]=vJ(null),X=D$();return kJ(()=>{if(typeof window>"u")return;let Y=window.Telegram?.WebApp;if(!Y)return;try{Y.ready?.()}catch(G){$?.()}if(X==="telegram_expanded"&&(Y.platform==="ios"||Y.platform==="android"))Y.expand();Z(Y)},[]),J},SJ=()=>{let $=i();return[$?.initDataUnsafe,$?.initData]};import{createContext as fJ}from"react";var hJ=T("@swarm.ing/pieui:context:navigate",()=>fJ(void 0)),E$=hJ;import{useContext as y$}from"react";import{createContext as mJ}from"react";var gJ=T("@swarm.ing/pieui:context:uiRenderer",()=>mJ(null)),x$=gJ;import{jsx as a}from"react/jsx-runtime";function C$({uiConfig:$,setUiAjaxConfiguration:J}){let Z=y$(C),X=y$(b),Y=L();if(Y)console.log("[UILoading] Rendering fallback for:",$.card),console.log("[UILoading] Component data:",$.data),console.log("[UILoading] Component content:",$.content),console.log("[UILoading] Has setUiAjaxConfiguration:",!!J);let G=o($.card);if(!G?.component){if(Y)console.warn(`[UILoading] Component not found in registry: ${$.card}`),console.log("[UILoading] Returning fallback component");return Z}if(Y)console.log("[UILoading] Found component in registry:",{name:G.name,isLazy:G.isLazy,hasMetadata:!!G.metadata,hasFallback:!!G.fallback});if(G.fallback){if(Y)console.log("[UILoading] Rendering fallback for:",G.name);let B=G.fallback;return a(B,{})}if(Y)console.log("[UILoading] No fallback, rendering full component:",G.name);let z=G.component,Q=a(x$.Provider,{value:C$,children:a(z,{data:$.data,content:$.content,setUiAjaxConfiguration:J})});if(G.isLazy)return a(k,{name:G.name,fallback:Z,onError:X,children:Q});return Q}var b$=C$;import{jsx as pJ}from"react/jsx-runtime";function k$($,J,Z){if(!J)return Z;let X=$.replace(/^\//,""),Y=J[X];if(!Y)return Z;return pJ(b$,{uiConfig:Y})}import{jsx as D,Fragment as iJ}from"react/jsx-runtime";var sJ=({location:$,fallback:J,piecache:Z,onError:X,queryOptions:Y,disableGlobalForm:G})=>{let z=$$(),Q=F$(),B=L(),U=f(()=>dJ({baseURL:z}),[z]),H=f(()=>Q$(),[]),W=f(()=>z?_$(z):null,[z]),F=f(()=>z?W$(z,Q):null,[z,Q]),V=i({onError:X}),{data:K,isLoading:A,error:M}=uJ({queryKey:["uiConfig",$.pathname+$.search,V?.initData],enabled:!!V?.initData,queryFn:async()=>{let I=new URLSearchParams($.search);if(I.set("__pieroot","telegram"),V?.initData)I.set("initData",V.initData);let P="/api/content"+$.pathname+"?"+I.toString();if(B)console.log("[PieRoot] Fetching UI configuration from:",P);let _=await U.get(P,{headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET,PUT,POST,DELETE,PATCH,OPTIONS","Content-type":"application/json"},withCredentials:!0});if(B)console.log("[PieRoot] Received UI configuration:",_.data);return _.data},staleTime:1/0,gcTime:1/0,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,retry:!0,retryDelay:(I)=>Math.min(1000*2**I,30000),...Y}),j=k$($.pathname,Z,J);if(!z)throw Error("Set PIE_API_SERVER and PIE_CENTRIFUGE_SERVER");if(M&&B)return console.error("[PieRoot] Error fetching UI configuration:",M),console.error("[PieRoot] Error details:",{message:M.message,status:M.response?.status,data:M.response?.data}),X?.(M),j;if(A||!K){if(B)console.log("[PieRoot] Loading state:",{isLoading:A,hasUiConfiguration:!!K});return j}if(B)console.log("[PieRoot] UI configuration loaded successfully:",K),console.log("[PieRoot] Rendering UI with configuration");return D(h.Provider,{value:H,children:D(w.Provider,{value:W,children:D(E.Provider,{value:F,children:D(C.Provider,{value:J??D(iJ,{}),children:D(j$,{children:D(N$,{children:G?D(X$,{uiConfig:K}):D("form",{id:"piedata_global_form",action:z+"api/process"+$.pathname,method:"post",encType:"multipart/form-data",children:D(X$,{uiConfig:K})})})})})})})})},oJ=($)=>{let J=f(()=>new cJ,[]),Z=$.queryClient??J;return D(E$.Provider,{value:$.onNavigate,children:D(e.Provider,{value:$.config,children:D(b.Provider,{value:$.onError,children:D(lJ,{client:Z,children:D(sJ,{...$})})})})})},aJ=oJ;import{useEffect as p$,useState as $Z}from"react";import{useContext as Y$,useEffect as n,useRef as z$}from"react";function v$($){return $.wasRecovering===!0&&$.recovered===!1}function S$($){return $.recoverable===!1}function f$($,J,Z){let X=$.getSubscription(J);if(X)return{subscription:X,createdHere:!1};return{subscription:$.newSubscription(J,Z),createdHere:!0}}import{useMemo as O1}from"react";var h$=new Map,m$=($,J)=>{h$.set($,J)},g$=($)=>{h$.delete($)};import{jsx as tJ,jsxs as eJ,Fragment as rJ}from"react/jsx-runtime";var nJ=({card:$,data:J,children:Z,useSocketioSupport:X=!1,useCentrifugeSupport:Y=!1,useMittSupport:G=!1,centrifugeChannel:z=void 0,methods:Q=void 0,stored:B=void 0,onResync:U=void 0})=>{let H=V$(),W=z$(Q);W.current=Q;let F=z$(U);F.current=U;let V=z$(B);V.current=B;let K=typeof B==="function";if(n(()=>{if(!K)return;let I=J.name;return m$(I,()=>[JSON.stringify(V.current())]),()=>g$(I)},[K,J.name]),H)console.log("[PieCard] Rendering card:",$),console.log("[PieCard] Card data:",J),console.log("[PieCard] Component name:",J?.name),console.log("[PieCard] Real-time support:",{socketio:X,centrifuge:Y,mitt:G,centrifugeChannel:z}),console.log("[PieCard] Methods:",Q?Object.keys(Q):"none"),console.log("[PieCard] Has children:",!!Z);let A=Y$(w),M=Y$(E),j=Y$(h);if(n(()=>{if(!A||!X||!W.current||!J.name){if(H&&X)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!A,useSocketioSupport:X,hasMethods:!!W.current,hasDataName:!!J?.name});return}let P=Object.keys(W.current??{}).map((_)=>{let q=`pie${_}_${J.name}`;if(H)console.log(`[PieCard] Socket.IO registering event: ${q}`);let O=(N)=>{W.current?.[_]?.(N)};return A.on(q,O),[q,O]});return()=>{P.forEach(([_,q])=>{if(H)console.log(`[PieCard] Socket.IO unregistering event: ${_}`);A.off(_,q)})}},[A,J.name,X]),n(()=>{if(!M||!Y||!z||!J.name){if(H&&Y)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!M,useCentrifugeSupport:Y,hasCentrifugeChannel:!!z,hasMethods:!!W.current,hasDataName:!!J?.name});return}let P=Object.keys(W.current??{}).map((_)=>{let q=`pie${_}_${J.name}_${z}`;if(H)console.log(`[PieCard] Centrifuge subscribing to channel: ${q}`);let{subscription:O,createdHere:N}=f$(M,q,{recoverable:!0,positioned:!0}),B$=(v)=>{if(H)console.log(`[PieCard] Centrifuge received data on ${q}:`,v.data);W.current?.[_]?.(v.data)},H$=(v)=>{if(S$(v))console.warn(`[PieCard] Centrifuge channel ${q} is not `+"recoverable — enable history on the server "+"namespace for exact replay; relying on resync fallback only.");if(v$(v)){if(H)console.log(`[PieCard] Centrifuge recovery gap on ${q}; requesting resync`);F.current?.({channel:q,reason:"gap"})}};return O.on("publication",B$),O.on("subscribed",H$),O.subscribe(),{subscription:O,createdHere:N,onPublication:B$,onSubscribed:H$}});return()=>{P.forEach(({subscription:_,createdHere:q,onPublication:O,onSubscribed:N})=>{if(H)console.log("[PieCard] Centrifuge unsubscribing from channel");if(_.off("publication",O),_.off("subscribed",N),q)_.unsubscribe(),M.removeSubscription(_)})}},[M,z,J.name,Y]),n(()=>{if(!j||!G||!J.name){if(H&&G)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!j,useMittSupport:G,hasMethods:!!W.current,hasDataName:!!J?.name});return}let I=Object.keys(W.current??{}),P={};return I.forEach((_)=>{let q=`pie${_}_${J.name}`,O=(N)=>{if(H)console.log(`[PieCard] Mitt registering event: ${q}`);W.current?.[_]?.(N)};P[q]=O,j.on(q,O)}),()=>{Object.entries(P).forEach(([_,q])=>{if(H)console.log(`[PieCard] Mitt unregistering event: ${_}`);j.off(_,q)})}},[j,J.name,G]),H)console.log("[PieCard] Rendering complete, returning children");if(B!==void 0&&!K)return eJ(rJ,{children:[tJ("input",{type:"hidden",name:J.name,value:JSON.stringify(B)}),Z]});return Z},r=nJ;import{jsx as c$}from"react/jsx-runtime";var JZ=({data:$})=>{let{name:J,key:Z,value:X,useSocketioSupport:Y,useCentrifugeSupport:G,useMittSupport:z,centrifugeChannel:Q}=$,[B,U]=$Z(X);return p$(()=>{U(X)},[X]),p$(()=>{if(typeof window>"u")return;let H=window.Telegram?.WebApp?.CloudStorage;if(!H)return;H.setItem(Z,B)},[Z,B]),c$(r,{card:"CloudStorageCard",data:$,useSocketioSupport:Y,useCentrifugeSupport:G,useMittSupport:z,centrifugeChannel:Q,methods:{update:({value:H})=>{U(H)},remove:()=>{let H=window.Telegram?.WebApp?.CloudStorage;if(H)H.removeItem(Z);U("")}},children:c$("input",{type:"hidden",id:J,name:J,value:B})})},l$=JZ;var ZZ=s({name:"CloudStorageCard",component:l$,metadata:{author:"PieData"}});import{useEffect as u$,useState as GZ}from"react";import{jsx as d$}from"react/jsx-runtime";var XZ=({data:$})=>{let{name:J,key:Z,value:X,useSocketioSupport:Y,useCentrifugeSupport:G,useMittSupport:z,centrifugeChannel:Q}=$,[B,U]=GZ(X);return u$(()=>{U(X)},[X]),u$(()=>{if(typeof window>"u")return;let H=window.Telegram?.WebApp?.SecureStorage;if(!H)return;H.setItem(Z,B)},[Z,B]),d$(r,{card:"SecureStorageCard",data:$,useSocketioSupport:Y,useCentrifugeSupport:G,useMittSupport:z,centrifugeChannel:Q,methods:{update:({value:H})=>{U(H)},remove:()=>{let H=window.Telegram?.WebApp?.SecureStorage;if(H)H.removeItem(Z);U("")}},children:d$("input",{type:"hidden",id:J,name:J,value:B})})},s$=XZ;var YZ=s({name:"SecureStorageCard",component:s$,metadata:{author:"PieData"}});export{i as useWebApp,SJ as useInitData,YZ as SecureStorageCard,aJ as PieTelegramRoot,ZZ as CloudStorageCard};
|
|
2
|
+
import{useMemo as f}from"react";import{QueryClient as dJ,QueryClientProvider as lJ,useQuery as sJ}from"@tanstack/react-query";import a$ from"mitt";import{createContext as n$,useCallback as WZ,useContext as qZ}from"react";var t=globalThis,W=($,J)=>{let Z=Symbol.for($);if(!(Z in t))t[Z]=J();return t[Z]};function H$(){return W("@swarm.ing/pieui:mitt-emitter",()=>a$())}var r$=W("@swarm.ing/pieui:context:mitt",()=>n$(null));var h=r$;import{io as t$}from"socket.io-client";import{createContext as e$}from"react";var T$=W("@swarm.ing/pieui:socket-cache",()=>new Map),_$=($)=>{let J=T$.get($);if(J)return J;let Z=t$($,{autoConnect:!1,transports:["websocket"]});return T$.set($,Z),Z},$J=W("@swarm.ing/pieui:context:socket",()=>e$(null)),w=$J;import{createContext as JJ}from"react";import{Centrifuge as W$}from"centrifuge";var q$=W("@swarm.ing/pieui:centrifuge-cache",()=>new Map),U$=($,J)=>{if(!J)return null;let Z=`${$}::${J}`,X=q$.get(Z);if(X)return X;async function Y(){let H=await fetch($+"api/centrifuge/gen_token",{credentials:"include"});if(!H.ok){if(H.status===401||H.status===403)throw new W$.UnauthorizedError("Backend is not answering");throw Error(`Unexpected status code ${H.status}`)}return(await H.json()).token}let G=new W$(J,{getToken:Y});return q$.set(Z,G),G},ZJ=W("@swarm.ing/pieui:context:centrifuge",()=>JJ(null)),E=ZJ;import{useContext as UJ,useEffect as FJ,useRef as J$}from"react";import{useEffect as GJ,useState as XJ}from"react";var m=new Map,g=new Map;function p($,J){let Z=`${$}::${J}`,X=$?m.get(Z):void 0,[Y,G]=XJ(X??null);return GJ(()=>{if(!$)return;if(m.has(Z)){G(m.get(Z));return}let H=g.get(Z);if(!H)H=fetch($+`api/support/${J}`,{method:"GET"}).then((B)=>B.json()).then((B)=>{return m.set(Z,B),g.delete(Z),B}).catch((B)=>{throw g.delete(Z),B}),g.set(Z,H);let Q=!1;return H.then((B)=>{if(!Q)G(B)}).catch(()=>{}),()=>{Q=!0}},[$,J,Z]),Y}import{createContext as YJ,useContext as zJ}from"react";var e=W("@swarm.ing/pieui:context:pieConfig",()=>YJ(null)),x=()=>{let $=zJ(e);if(!$)throw Error("usePieConfig must be used within PieConfigProvider");return $},$$=()=>{let{apiServer:$}=x();return $},c=$$,F$=()=>{let{centrifugeServer:$}=x();return $};var L=()=>{let{enableRenderingLog:$}=x();return $},V$=L,K$=()=>{let{pageProcessor:$}=x();return $};var u=()=>{let{onLinkLost:$}=x();return $},d=()=>{let{onLinkRestored:$}=x();return $};var BJ=($)=>{let J=document.cookie?document.cookie.split(";"):[];for(let Z of J){let X=Z.indexOf("=");if((X===-1?Z:Z.slice(0,X)).trim()===$){let G=X===-1?"":Z.slice(X+1).trim();try{return decodeURIComponent(G)}catch{return G}}}return null},QJ={isClient(){return typeof window<"u"&&typeof document<"u"},readSid(){return typeof window>"u"?void 0:window.sid},setSid($){if(typeof window<"u")window.sid=$},readWebStorage($,J){return($==="local"?window.localStorage:window.sessionStorage).getItem(J)},readCookie:BJ,readUrlParams($){return new URLSearchParams(window.location.search).getAll($)},readDomInput($){let J=document.getElementsByName($);if(!J.length)return null;let Z=J[0];if(Z instanceof HTMLInputElement){if(Z.type==="file"&&Z.files)return Array.from(Z.files);return[Z.value]}if(Z instanceof HTMLTextAreaElement)return[Z.value];return[]},submitGlobalForm(){if(typeof document>"u")return;let $=document.getElementById("piedata_global_form");$&&$.submit()}},D$=QJ;var HJ={};function R(){return HJ}var M$=new Map;var I$=($)=>{return M$.has($)?M$.get($):null};var O$,TJ={isClient(){return!0},readSid(){return O$},setSid($){O$=$},readWebStorage($,J){let Z=R(),X=$==="local"?Z.storage:Z.sessionStorage;return X?X.getItem(J):null},async readWebStorageAsync($,J){let Z=R(),X=$==="local"?Z.asyncStorage:Z.asyncSessionStorage;if(X)return X.getItem(J);let Y=$==="local"?Z.storage:Z.sessionStorage;return Y?Y.getItem(J):null},readCookie($){let J=R();return J.getCookie?J.getCookie($):null},readUrlParams($){let J=R();return J.getRouteParams?J.getRouteParams($):[]},readDomInput($){let J=R();return J.getInput?J.getInput($):I$($)},submitGlobalForm(){R().submitForm?.()}},P$=TJ;var _J=typeof navigator<"u"&&navigator.product==="ReactNative",WJ=_J?P$:D$,l=WJ;var qJ=W("@swarm.ing/pieui:sid-state",()=>({promise:null,resolve:null}));function A$(){qJ.resolve?.()}function C($,J){if(J==="up")return{state:"up",signal:$==="down"?"restored":null};return{state:"down",signal:$==="up"?"lost":null}}var VJ=({children:$})=>{let J=UJ(w),Z=c(),X=p(Z,"socketIO"),Y=u(),G=d(),H=J$(Y);H.current=Y;let Q=J$(G);Q.current=G;let B=J$("initial"),T=(z)=>{if(l.isClient())l.setSid(z.sid),A$(),console.log(`SocketIO initialized: ${l.readSid()}`)};return FJ(()=>{if(!J||!X)return;let z=()=>{let{state:F,signal:K}=C(B.current,"up");if(B.current=F,K==="restored")Q.current?.("socketio");console.log("SocketIO connected")},U=(F)=>{if(console.log(`SocketIO disconnected: ${F}`),J.connect(),F==="io client disconnect")return;let{state:K,signal:O}=C(B.current,"down");if(B.current=K,O==="lost")H.current?.("socketio",F)};return J.on("pieinit",T),J.on("connect",z),J.on("disconnect",U),J.connect(),()=>{J.off("pieinit",T),J.off("connect",z),J.off("disconnect",U),J.disconnect()}},[J,X]),$},j$=VJ;import{useContext as KJ,useEffect as DJ,useRef as Z$}from"react";var MJ=({children:$})=>{let J=KJ(E),Z=c(),X=p(Z,"centrifuge"),Y=u(),G=d(),H=Z$(Y);H.current=Y;let Q=Z$(G);Q.current=G;let B=Z$("initial");return DJ(()=>{if(!J||!X)return;let T=(F)=>{let{state:K,signal:O}=C(B.current,"down");if(B.current=K,O==="lost")H.current?.("centrifuge",F)},z=()=>{let{state:F,signal:K}=C(B.current,"up");if(B.current=F,K==="restored")Q.current?.("centrifuge");console.log("Centrifuge connected")},U=(F)=>{console.log("Centrifuge disconnected:",F),T(F)};return J.on("connecting",T),J.on("connected",z),J.on("disconnected",U),J.connect(),()=>{J.off("connecting",T),J.off("connected",z),J.off("disconnected",U),J.disconnect()}},[J,X]),$},N$=MJ;import{createContext as IJ}from"react";import{jsx as AJ,Fragment as PJ}from"react/jsx-runtime";var OJ=W("@swarm.ing/pieui:context:fallback",()=>IJ(AJ(PJ,{}))),y=OJ;import{createContext as jJ}from"react";var NJ=W("@swarm.ing/pieui:context:lazyError",()=>jJ(void 0)),b=NJ;import{lazy as LJ}from"react";var v=new Map;function RJ($,J){return J.catch(()=>{if(v.get($)===J)v.delete($)}),v.set($,J),J}function L$($,J){return LJ(()=>{if(v.has(J))return v.get(J);return RJ(J,$().then((Z)=>Z))})}var R$=W("@swarm.ing/pieui:component-registry",()=>new Map),wJ=($)=>{if(!$.name)throw Error("Component registration requires a name");if(!$.component&&!$.loader)throw Error(`Component "${$.name}" requires component or loader`);let J={name:$.name,component:$.component,loader:$.loader,metadata:$.metadata,fallback:$.fallback,isLazy:!1};if(!J.component&&J.loader)J.component=L$(J.loader,$.name),J.isLazy=!0;return J};function s($){let J=wJ($);return R$.set(J.name,J),J.component}var o=($)=>{return R$.get($)};import{useContext as w$,memo as kJ}from"react";import{Component as EJ,Suspense as xJ}from"react";import{jsx as bJ}from"react/jsx-runtime";var CJ=2,yJ=400;class k extends EJ{state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch($){if(this.props.onError?.($),this.state.attempt<CJ){let J=yJ*(this.state.attempt+1);this.timer=setTimeout(()=>{this.setState((Z)=>({failed:!1,attempt:Z.attempt+1}))},J)}}componentDidUpdate($){if($.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 bJ(xJ,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}import{jsx as G$}from"react/jsx-runtime";function SJ({uiConfig:$,setUiAjaxConfiguration:J}){let Z=w$(y),X=w$(b),Y=L();if(Y)console.log("[UI] Rendering component:",$.card),console.log("[UI] Component data:",$.data),console.log("[UI] Component content:",$.content),console.log("[UI] Has setUiAjaxConfiguration:",!!J);let G=o($.card);if(!G?.component){if(Y)console.warn(`[UI] Component not found in registry: ${$.card}`),console.log("[UI] Returning fallback component");return Z}if(Y)console.log("[UI] Found component in registry:",{name:G.name,isLazy:G.isLazy,hasMetadata:!!G.metadata});let H=G.component,Q=G$(H,{data:$.data,content:$.content,setUiAjaxConfiguration:J});if(G.isLazy){if(Y)console.log("[UI] Rendering lazy component with Suspense:",G.name);return G$(k,{name:G.name,fallback:G.fallback?G$(G.fallback,{}):Z,onError:X,children:Q})}if(Y)console.log("[UI] Rendering component directly:",G.name);return Q}var X$=kJ(SJ);import{createAxiosDateTransformer as oJ}from"axios-date-transformer";import{useEffect as vJ,useState as fJ}from"react";var i=({onError:$}={})=>{let[J,Z]=fJ(null),X=K$();return vJ(()=>{if(typeof window>"u")return;let Y=window.Telegram?.WebApp;if(!Y)return;try{Y.ready?.()}catch(G){$?.()}if(X==="telegram_expanded"&&(Y.platform==="ios"||Y.platform==="android"))Y.expand();Z(Y)},[]),J},hJ=()=>{let $=i();return[$?.initDataUnsafe,$?.initData]};import{createContext as mJ}from"react";var gJ=W("@swarm.ing/pieui:context:navigate",()=>mJ(void 0)),E$=gJ;import{useContext as C$}from"react";import{createContext as pJ}from"react";var cJ=W("@swarm.ing/pieui:context:uiRenderer",()=>pJ(null)),x$=cJ;import{jsx as a}from"react/jsx-runtime";function y$({uiConfig:$,setUiAjaxConfiguration:J}){let Z=C$(y),X=C$(b),Y=L();if(Y)console.log("[UILoading] Rendering fallback for:",$.card),console.log("[UILoading] Component data:",$.data),console.log("[UILoading] Component content:",$.content),console.log("[UILoading] Has setUiAjaxConfiguration:",!!J);let G=o($.card);if(!G?.component){if(Y)console.warn(`[UILoading] Component not found in registry: ${$.card}`),console.log("[UILoading] Returning fallback component");return Z}if(Y)console.log("[UILoading] Found component in registry:",{name:G.name,isLazy:G.isLazy,hasMetadata:!!G.metadata,hasFallback:!!G.fallback});if(G.fallback){if(Y)console.log("[UILoading] Rendering fallback for:",G.name);let B=G.fallback;return a(B,{})}if(Y)console.log("[UILoading] No fallback, rendering full component:",G.name);let H=G.component,Q=a(x$.Provider,{value:y$,children:a(H,{data:$.data,content:$.content,setUiAjaxConfiguration:J})});if(G.isLazy)return a(k,{name:G.name,fallback:Z,onError:X,children:Q});return Q}var b$=y$;import{jsx as uJ}from"react/jsx-runtime";function k$($,J,Z){if(!J)return Z;let X=$.replace(/^\//,""),Y=J[X];if(!Y)return Z;return uJ(b$,{uiConfig:Y})}function S$({apiServer:$,pathname:J,search:Z,root:X,initData:Y}){let G=new URLSearchParams(Z);if(G.set("__pieroot",X),Y)G.set("initData",Y);return`${$.replace(/\/$/,"")}/api/content${J}?${G.toString()}`}async function v$($,J){if(!$||$.used||$.url!==J)return null;$.used=!0;try{return await $.promise}catch{return null}}import{jsx as V,Fragment as nJ}from"react/jsx-runtime";var iJ=({location:$,fallback:J,piecache:Z,onError:X,queryOptions:Y,configPrefetch:G,disableGlobalForm:H})=>{let Q=$$(),B=F$(),T=L(),z=f(()=>oJ({baseURL:Q}),[Q]),U=f(()=>H$(),[]),F=f(()=>Q?_$(Q):null,[Q]),K=f(()=>Q?U$(Q,B):null,[Q,B]),O=i({onError:X}),{data:P,isLoading:j,error:D}=sJ({queryKey:["uiConfig",$.pathname+$.search,O?.initData],enabled:!!O?.initData,queryFn:async()=>{let M=S$({apiServer:Q,pathname:$.pathname,search:$.search,root:"telegram",initData:O?.initData}),q=await v$(G,M);if(q){if(T)console.log("[PieRoot] Using prefetched UI configuration");return q}if(T)console.log("[PieRoot] Fetching UI configuration from:",M);let _=await z.get(M,{withCredentials:!0});if(T)console.log("[PieRoot] Received UI configuration:",_.data);return _.data},staleTime:1/0,gcTime:1/0,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,retry:!0,retryDelay:(M)=>Math.min(1000*2**M,30000),...Y}),A=k$($.pathname,Z,J);if(!Q)throw Error("Set PIE_API_SERVER and PIE_CENTRIFUGE_SERVER");if(D&&T)return console.error("[PieRoot] Error fetching UI configuration:",D),console.error("[PieRoot] Error details:",{message:D.message,status:D.response?.status,data:D.response?.data}),X?.(D),A;if(j||!P){if(T)console.log("[PieRoot] Loading state:",{isLoading:j,hasUiConfiguration:!!P});return A}if(T)console.log("[PieRoot] UI configuration loaded successfully:",P),console.log("[PieRoot] Rendering UI with configuration");return V(h.Provider,{value:U,children:V(w.Provider,{value:F,children:V(E.Provider,{value:K,children:V(y.Provider,{value:J??V(nJ,{}),children:V(j$,{children:V(N$,{children:H?V(X$,{uiConfig:P}):V("form",{id:"piedata_global_form",action:Q+"api/process"+$.pathname,method:"post",encType:"multipart/form-data",children:V(X$,{uiConfig:P})})})})})})})})},aJ=($)=>{let J=f(()=>new dJ,[]),Z=$.queryClient??J;return V(E$.Provider,{value:$.onNavigate,children:V(e.Provider,{value:$.config,children:V(b.Provider,{value:$.onError,children:V(lJ,{client:Z,children:V(iJ,{...$})})})})})},rJ=aJ;import{useEffect as u$,useState as ZZ}from"react";import{useContext as Y$,useEffect as n,useRef as z$}from"react";function f$($){return $.wasRecovering===!0&&$.recovered===!1}function h$($){return $.recoverable===!1}function m$($,J,Z){let X=$.getSubscription(J);if(X)return{subscription:X,createdHere:!1};return{subscription:$.newSubscription(J,Z),createdHere:!0}}import{useMemo as N1}from"react";var g$=new Map,p$=($,J)=>{g$.set($,J)},c$=($)=>{g$.delete($)};import{jsx as $Z,jsxs as JZ,Fragment as eJ}from"react/jsx-runtime";var tJ=({card:$,data:J,children:Z,useSocketioSupport:X=!1,useCentrifugeSupport:Y=!1,useMittSupport:G=!1,centrifugeChannel:H=void 0,methods:Q=void 0,stored:B=void 0,onResync:T=void 0})=>{let z=V$(),U=z$(Q);U.current=Q;let F=z$(T);F.current=T;let K=z$(B);K.current=B;let O=typeof B==="function";if(n(()=>{if(!O)return;let A=J.name;return p$(A,()=>[JSON.stringify(K.current())]),()=>c$(A)},[O,J.name]),z)console.log("[PieCard] Rendering card:",$),console.log("[PieCard] Card data:",J),console.log("[PieCard] Component name:",J?.name),console.log("[PieCard] Real-time support:",{socketio:X,centrifuge:Y,mitt:G,centrifugeChannel:H}),console.log("[PieCard] Methods:",Q?Object.keys(Q):"none"),console.log("[PieCard] Has children:",!!Z);let P=Y$(w),j=Y$(E),D=Y$(h);if(n(()=>{if(!P||!X||!U.current||!J.name){if(z&&X)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!P,useSocketioSupport:X,hasMethods:!!U.current,hasDataName:!!J?.name});return}let M=Object.keys(U.current??{}).map((q)=>{let _=`pie${q}_${J.name}`;if(z)console.log(`[PieCard] Socket.IO registering event: ${_}`);let I=(N)=>{U.current?.[q]?.(N)};return P.on(_,I),[_,I]});return()=>{M.forEach(([q,_])=>{if(z)console.log(`[PieCard] Socket.IO unregistering event: ${q}`);P.off(q,_)})}},[P,J.name,X]),n(()=>{if(!j||!Y||!H||!J.name){if(z&&Y)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!j,useCentrifugeSupport:Y,hasCentrifugeChannel:!!H,hasMethods:!!U.current,hasDataName:!!J?.name});return}let M=Object.keys(U.current??{}).map((q)=>{let _=`pie${q}_${J.name}_${H}`;if(z)console.log(`[PieCard] Centrifuge subscribing to channel: ${_}`);let{subscription:I,createdHere:N}=m$(j,_,{recoverable:!0,positioned:!0}),B$=(S)=>{if(z)console.log(`[PieCard] Centrifuge received data on ${_}:`,S.data);U.current?.[q]?.(S.data)},Q$=(S)=>{if(h$(S))console.warn(`[PieCard] Centrifuge channel ${_} is not `+"recoverable — enable history on the server "+"namespace for exact replay; relying on resync fallback only.");if(f$(S)){if(z)console.log(`[PieCard] Centrifuge recovery gap on ${_}; requesting resync`);F.current?.({channel:_,reason:"gap"})}};return I.on("publication",B$),I.on("subscribed",Q$),I.subscribe(),{subscription:I,createdHere:N,onPublication:B$,onSubscribed:Q$}});return()=>{M.forEach(({subscription:q,createdHere:_,onPublication:I,onSubscribed:N})=>{if(z)console.log("[PieCard] Centrifuge unsubscribing from channel");if(q.off("publication",I),q.off("subscribed",N),_)q.unsubscribe(),j.removeSubscription(q)})}},[j,H,J.name,Y]),n(()=>{if(!D||!G||!J.name){if(z&&G)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!D,useMittSupport:G,hasMethods:!!U.current,hasDataName:!!J?.name});return}let A=Object.keys(U.current??{}),M={};return A.forEach((q)=>{let _=`pie${q}_${J.name}`,I=(N)=>{if(z)console.log(`[PieCard] Mitt registering event: ${_}`);U.current?.[q]?.(N)};M[_]=I,D.on(_,I)}),()=>{Object.entries(M).forEach(([q,_])=>{if(z)console.log(`[PieCard] Mitt unregistering event: ${q}`);D.off(q,_)})}},[D,J.name,G]),z)console.log("[PieCard] Rendering complete, returning children");if(B!==void 0&&!O)return JZ(eJ,{children:[$Z("input",{type:"hidden",name:J.name,value:JSON.stringify(B)}),Z]});return Z},r=tJ;import{jsx as d$}from"react/jsx-runtime";var GZ=({data:$})=>{let{name:J,key:Z,value:X,useSocketioSupport:Y,useCentrifugeSupport:G,useMittSupport:H,centrifugeChannel:Q}=$,[B,T]=ZZ(X);return u$(()=>{T(X)},[X]),u$(()=>{if(typeof window>"u")return;let z=window.Telegram?.WebApp?.CloudStorage;if(!z)return;z.setItem(Z,B)},[Z,B]),d$(r,{card:"CloudStorageCard",data:$,useSocketioSupport:Y,useCentrifugeSupport:G,useMittSupport:H,centrifugeChannel:Q,methods:{update:({value:z})=>{T(z)},remove:()=>{let z=window.Telegram?.WebApp?.CloudStorage;if(z)z.removeItem(Z);T("")}},children:d$("input",{type:"hidden",id:J,name:J,value:B})})},l$=GZ;var XZ=s({name:"CloudStorageCard",component:l$,metadata:{author:"PieData"}});import{useEffect as s$,useState as YZ}from"react";import{jsx as o$}from"react/jsx-runtime";var zZ=({data:$})=>{let{name:J,key:Z,value:X,useSocketioSupport:Y,useCentrifugeSupport:G,useMittSupport:H,centrifugeChannel:Q}=$,[B,T]=YZ(X);return s$(()=>{T(X)},[X]),s$(()=>{if(typeof window>"u")return;let z=window.Telegram?.WebApp?.SecureStorage;if(!z)return;z.setItem(Z,B)},[Z,B]),o$(r,{card:"SecureStorageCard",data:$,useSocketioSupport:Y,useCentrifugeSupport:G,useMittSupport:H,centrifugeChannel:Q,methods:{update:({value:z})=>{T(z)},remove:()=>{let z=window.Telegram?.WebApp?.SecureStorage;if(z)z.removeItem(Z);T("")}},children:o$("input",{type:"hidden",id:J,name:J,value:B})})},i$=zZ;var BZ=s({name:"SecureStorageCard",component:i$,metadata:{author:"PieData"}});export{i as useWebApp,hJ as useInitData,BZ as SecureStorageCard,rJ as PieTelegramRoot,XZ as CloudStorageCard};
|
package/dist/telegram/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
var MJ=Object.create;var{getPrototypeOf:IJ,defineProperty:c,getOwnPropertyNames:j$,getOwnPropertyDescriptor:OJ}=Object,N$=Object.prototype.hasOwnProperty;var PJ=($,J,Z)=>{Z=$!=null?MJ(IJ($)):{};let G=J||!$||!$.__esModule?c(Z,"default",{value:$,enumerable:!0}):Z;for(let Y of j$($))if(!N$.call(G,Y))c(G,Y,{get:()=>$[Y],enumerable:!0});return G},A$=new WeakMap,AJ=($)=>{var J=A$.get($),Z;if(J)return J;if(J=c({},"__esModule",{value:!0}),$&&typeof $==="object"||typeof $==="function")j$($).map((G)=>!N$.call(J,G)&&c(J,G,{get:()=>$[G],enumerable:!(Z=OJ($,G))||Z.enumerable}));return A$.set($,J),J};var jJ=($,J)=>{for(var Z in J)c($,Z,{get:J[Z],enumerable:!0,configurable:!0,set:(G)=>J[Z]=()=>G})};var tJ={};jJ(tJ,{useWebApp:()=>d,useInitData:()=>t$,SecureStorageCard:()=>KJ,PieTelegramRoot:()=>HJ,CloudStorageCard:()=>VJ});module.exports=AJ(tJ);var h=require("react"),m=require("@tanstack/react-query");var L$=PJ(require("mitt")),a=require("react");var U$=globalThis,T=($,J)=>{let Z=Symbol.for($);if(!(Z in U$))U$[Z]=J();return U$[Z]};function R$(){return T("@swarm.ing/pieui:mitt-emitter",()=>L$.default())}var NJ=T("@swarm.ing/pieui:context:mitt",()=>a.createContext(null));var n=NJ;var E$=require("socket.io-client"),x$=require("react");var w$=T("@swarm.ing/pieui:socket-cache",()=>new Map),y$=($)=>{let J=w$.get($);if(J)return J;let Z=E$.io($,{autoConnect:!1,transports:["websocket"]});return w$.set($,Z),Z},LJ=T("@swarm.ing/pieui:context:socket",()=>x$.createContext(null)),y=LJ;var b$=require("react"),W$=require("centrifuge");var C$=T("@swarm.ing/pieui:centrifuge-cache",()=>new Map),k$=($,J)=>{if(!J)return null;let Z=`${$}::${J}`,G=C$.get(Z);if(G)return G;async function Y(){let z=await fetch($+"api/centrifuge/gen_token",{credentials:"include"});if(!z.ok){if(z.status===401||z.status===403)throw new W$.Centrifuge.UnauthorizedError("Backend is not answering");throw Error(`Unexpected status code ${z.status}`)}return(await z.json()).token}let X=new W$.Centrifuge(J,{getToken:Y});return C$.set(Z,X),X},RJ=T("@swarm.ing/pieui:context:centrifuge",()=>b$.createContext(null)),C=RJ;var L=require("react");var e=require("react"),r=new Map,t=new Map;function $$($,J){let Z=`${$}::${J}`,G=$?r.get(Z):void 0,[Y,X]=e.useState(G??null);return e.useEffect(()=>{if(!$)return;if(r.has(Z)){X(r.get(Z));return}let z=t.get(Z);if(!z)z=fetch($+`api/support/${J}`,{method:"GET"}).then((B)=>B.json()).then((B)=>{return r.set(Z,B),t.delete(Z),B}).catch((B)=>{throw t.delete(Z),B}),t.set(Z,z);let Q=!1;return z.then((B)=>{if(!Q)X(B)}).catch(()=>{}),()=>{Q=!0}},[$,J,Z]),Y}var J$=require("react");var F$=T("@swarm.ing/pieui:context:pieConfig",()=>J$.createContext(null)),b=()=>{let $=J$.useContext(F$);if(!$)throw Error("usePieConfig must be used within PieConfigProvider");return $},V$=()=>{let{apiServer:$}=b();return $},Z$=V$,v$=()=>{let{centrifugeServer:$}=b();return $};var E=()=>{let{enableRenderingLog:$}=b();return $},S$=E,f$=()=>{let{pageProcessor:$}=b();return $};var G$=()=>{let{onLinkLost:$}=b();return $},X$=()=>{let{onLinkRestored:$}=b();return $};var wJ=($)=>{let J=document.cookie?document.cookie.split(";"):[];for(let Z of J){let G=Z.indexOf("=");if((G===-1?Z:Z.slice(0,G)).trim()===$){let X=G===-1?"":Z.slice(G+1).trim();try{return decodeURIComponent(X)}catch{return X}}}return null},EJ={isClient(){return typeof window<"u"&&typeof document<"u"},readSid(){return typeof window>"u"?void 0:window.sid},setSid($){if(typeof window<"u")window.sid=$},readWebStorage($,J){return($==="local"?window.localStorage:window.sessionStorage).getItem(J)},readCookie:wJ,readUrlParams($){return new URLSearchParams(window.location.search).getAll($)},readDomInput($){let J=document.getElementsByName($);if(!J.length)return null;let Z=J[0];if(Z instanceof HTMLInputElement){if(Z.type==="file"&&Z.files)return Array.from(Z.files);return[Z.value]}if(Z instanceof HTMLTextAreaElement)return[Z.value];return[]},submitGlobalForm(){if(typeof document>"u")return;let $=document.getElementById("piedata_global_form");$&&$.submit()}},h$=EJ;var xJ={};function x(){return xJ}var m$=new Map;var g$=($)=>{return m$.has($)?m$.get($):null};var p$,yJ={isClient(){return!0},readSid(){return p$},setSid($){p$=$},readWebStorage($,J){let Z=x(),G=$==="local"?Z.storage:Z.sessionStorage;return G?G.getItem(J):null},async readWebStorageAsync($,J){let Z=x(),G=$==="local"?Z.asyncStorage:Z.asyncSessionStorage;if(G)return G.getItem(J);let Y=$==="local"?Z.storage:Z.sessionStorage;return Y?Y.getItem(J):null},readCookie($){let J=x();return J.getCookie?J.getCookie($):null},readUrlParams($){let J=x();return J.getRouteParams?J.getRouteParams($):[]},readDomInput($){let J=x();return J.getInput?J.getInput($):g$($)},submitGlobalForm(){x().submitForm?.()}},c$=yJ;var CJ=typeof navigator<"u"&&navigator.product==="ReactNative",bJ=CJ?c$:h$,Y$=bJ;var kJ=T("@swarm.ing/pieui:sid-state",()=>({promise:null,resolve:null}));function l$(){kJ.resolve?.()}function k($,J){if(J==="up")return{state:"up",signal:$==="down"?"restored":null};return{state:"down",signal:$==="up"?"lost":null}}var vJ=({children:$})=>{let J=L.useContext(y),Z=Z$(),G=$$(Z,"socketIO"),Y=G$(),X=X$(),z=L.useRef(Y);z.current=Y;let Q=L.useRef(X);Q.current=X;let B=L.useRef("initial"),U=(H)=>{if(Y$.isClient())Y$.setSid(H.sid),l$(),console.log(`SocketIO initialized: ${Y$.readSid()}`)};return L.useEffect(()=>{if(!J||!G)return;let H=()=>{let{state:V,signal:D}=k(B.current,"up");if(B.current=V,D==="restored")Q.current?.("socketio");console.log("SocketIO connected")},W=(V)=>{if(console.log(`SocketIO disconnected: ${V}`),J.connect(),V==="io client disconnect")return;let{state:D,signal:K}=k(B.current,"down");if(B.current=D,K==="lost")z.current?.("socketio",V)};return J.on("pieinit",U),J.on("connect",H),J.on("disconnect",W),J.connect(),()=>{J.off("pieinit",U),J.off("connect",H),J.off("disconnect",W),J.disconnect()}},[J,G]),$},u$=vJ;var R=require("react");var SJ=({children:$})=>{let J=R.useContext(C),Z=Z$(),G=$$(Z,"centrifuge"),Y=G$(),X=X$(),z=R.useRef(Y);z.current=Y;let Q=R.useRef(X);Q.current=X;let B=R.useRef("initial");return R.useEffect(()=>{if(!J||!G)return;let U=(V)=>{let{state:D,signal:K}=k(B.current,"down");if(B.current=D,K==="lost")z.current?.("centrifuge",V)},H=()=>{let{state:V,signal:D}=k(B.current,"up");if(B.current=V,D==="restored")Q.current?.("centrifuge");console.log("Centrifuge connected")},W=(V)=>{console.log("Centrifuge disconnected:",V),U(V)};return J.on("connecting",U),J.on("connected",H),J.on("disconnected",W),J.connect(),()=>{J.off("connecting",U),J.off("connected",H),J.off("disconnected",W),J.disconnect()}},[J,G]),$},d$=SJ;var s$=require("react");var z$=require("react/jsx-runtime"),fJ=T("@swarm.ing/pieui:context:fallback",()=>s$.createContext(z$.jsx(z$.Fragment,{}))),v=fJ;var o$=require("react");var hJ=T("@swarm.ing/pieui:context:lazyError",()=>o$.createContext(void 0)),S=hJ;var i$=require("react"),l=new Map;function mJ($,J){return J.catch(()=>{if(l.get($)===J)l.delete($)}),l.set($,J),J}function a$($,J){return i$.lazy(()=>{if(l.has(J))return l.get(J);return mJ(J,$().then((Z)=>Z))})}var n$=T("@swarm.ing/pieui:component-registry",()=>new Map),gJ=($)=>{if(!$.name)throw Error("Component registration requires a name");if(!$.component&&!$.loader)throw Error(`Component "${$.name}" requires component or loader`);let J={name:$.name,component:$.component,loader:$.loader,metadata:$.metadata,fallback:$.fallback,isLazy:!1};if(!J.component&&J.loader)J.component=a$(J.loader,$.name),J.isLazy=!0;return J};function B$($){let J=gJ($);return n$.set(J.name,J),J.component}var H$=($)=>{return n$.get($)};var u=require("react");var Q$=require("react"),r$=require("react/jsx-runtime"),pJ=2,cJ=400;class f extends Q$.Component{state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch($){if(this.props.onError?.($),this.state.attempt<pJ){let J=cJ*(this.state.attempt+1);this.timer=setTimeout(()=>{this.setState((Z)=>({failed:!1,attempt:Z.attempt+1}))},J)}}componentDidUpdate($){if($.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 r$.jsx(Q$.Suspense,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}var T$=require("react/jsx-runtime");function lJ({uiConfig:$,setUiAjaxConfiguration:J}){let Z=u.useContext(v),G=u.useContext(S),Y=E();if(Y)console.log("[UI] Rendering component:",$.card),console.log("[UI] Component data:",$.data),console.log("[UI] Component content:",$.content),console.log("[UI] Has setUiAjaxConfiguration:",!!J);let X=H$($.card);if(!X?.component){if(Y)console.warn(`[UI] Component not found in registry: ${$.card}`),console.log("[UI] Returning fallback component");return Z}if(Y)console.log("[UI] Found component in registry:",{name:X.name,isLazy:X.isLazy,hasMetadata:!!X.metadata});let z=X.component,Q=T$.jsx(z,{data:$.data,content:$.content,setUiAjaxConfiguration:J});if(X.isLazy){if(Y)console.log("[UI] Rendering lazy component with Suspense:",X.name);return T$.jsx(f,{name:X.name,fallback:X.fallback?T$.jsx(X.fallback,{}):Z,onError:G,children:Q})}if(Y)console.log("[UI] Rendering component directly:",X.name);return Q}var D$=u.memo(lJ);var BJ=require("axios-date-transformer");var _$=require("react");var d=({onError:$}={})=>{let[J,Z]=_$.useState(null),G=f$();return _$.useEffect(()=>{if(typeof window>"u")return;let Y=window.Telegram?.WebApp;if(!Y)return;try{Y.ready?.()}catch(X){$?.()}if(G==="telegram_expanded"&&(Y.platform==="ios"||Y.platform==="android"))Y.expand();Z(Y)},[]),J},t$=()=>{let $=d();return[$?.initDataUnsafe,$?.initData]};var e$=require("react");var uJ=T("@swarm.ing/pieui:context:navigate",()=>e$.createContext(void 0)),$J=uJ;var K$=require("react");var JJ=require("react");var dJ=T("@swarm.ing/pieui:context:uiRenderer",()=>JJ.createContext(null)),ZJ=dJ;var s=require("react/jsx-runtime");function GJ({uiConfig:$,setUiAjaxConfiguration:J}){let Z=K$.useContext(v),G=K$.useContext(S),Y=E();if(Y)console.log("[UILoading] Rendering fallback for:",$.card),console.log("[UILoading] Component data:",$.data),console.log("[UILoading] Component content:",$.content),console.log("[UILoading] Has setUiAjaxConfiguration:",!!J);let X=H$($.card);if(!X?.component){if(Y)console.warn(`[UILoading] Component not found in registry: ${$.card}`),console.log("[UILoading] Returning fallback component");return Z}if(Y)console.log("[UILoading] Found component in registry:",{name:X.name,isLazy:X.isLazy,hasMetadata:!!X.metadata,hasFallback:!!X.fallback});if(X.fallback){if(Y)console.log("[UILoading] Rendering fallback for:",X.name);let B=X.fallback;return s.jsx(B,{})}if(Y)console.log("[UILoading] No fallback, rendering full component:",X.name);let z=X.component,Q=s.jsx(ZJ.Provider,{value:GJ,children:s.jsx(z,{data:$.data,content:$.content,setUiAjaxConfiguration:J})});if(X.isLazy)return s.jsx(f,{name:X.name,fallback:Z,onError:G,children:Q});return Q}var XJ=GJ;var zJ=require("react/jsx-runtime");function YJ($,J,Z){if(!J)return Z;let G=$.replace(/^\//,""),Y=J[G];if(!Y)return Z;return zJ.jsx(XJ,{uiConfig:Y})}var F=require("react/jsx-runtime"),sJ=({location:$,fallback:J,piecache:Z,onError:G,queryOptions:Y,disableGlobalForm:X})=>{let z=V$(),Q=v$(),B=E(),U=h.useMemo(()=>BJ.createAxiosDateTransformer({baseURL:z}),[z]),H=h.useMemo(()=>R$(),[]),W=h.useMemo(()=>z?y$(z):null,[z]),V=h.useMemo(()=>z?k$(z,Q):null,[z,Q]),D=d({onError:G}),{data:K,isLoading:j,error:I}=m.useQuery({queryKey:["uiConfig",$.pathname+$.search,D?.initData],enabled:!!D?.initData,queryFn:async()=>{let O=new URLSearchParams($.search);if(O.set("__pieroot","telegram"),D?.initData)O.set("initData",D.initData);let A="/api/content"+$.pathname+"?"+O.toString();if(B)console.log("[PieRoot] Fetching UI configuration from:",A);let _=await U.get(A,{headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET,PUT,POST,DELETE,PATCH,OPTIONS","Content-type":"application/json"},withCredentials:!0});if(B)console.log("[PieRoot] Received UI configuration:",_.data);return _.data},staleTime:1/0,gcTime:1/0,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,retry:!0,retryDelay:(O)=>Math.min(1000*2**O,30000),...Y}),N=YJ($.pathname,Z,J);if(!z)throw Error("Set PIE_API_SERVER and PIE_CENTRIFUGE_SERVER");if(I&&B)return console.error("[PieRoot] Error fetching UI configuration:",I),console.error("[PieRoot] Error details:",{message:I.message,status:I.response?.status,data:I.response?.data}),G?.(I),N;if(j||!K){if(B)console.log("[PieRoot] Loading state:",{isLoading:j,hasUiConfiguration:!!K});return N}if(B)console.log("[PieRoot] UI configuration loaded successfully:",K),console.log("[PieRoot] Rendering UI with configuration");return F.jsx(n.Provider,{value:H,children:F.jsx(y.Provider,{value:W,children:F.jsx(C.Provider,{value:V,children:F.jsx(v.Provider,{value:J??F.jsx(F.Fragment,{}),children:F.jsx(u$,{children:F.jsx(d$,{children:X?F.jsx(D$,{uiConfig:K}):F.jsx("form",{id:"piedata_global_form",action:z+"api/process"+$.pathname,method:"post",encType:"multipart/form-data",children:F.jsx(D$,{uiConfig:K})})})})})})})})},oJ=($)=>{let J=h.useMemo(()=>new m.QueryClient,[]),Z=$.queryClient??J;return F.jsx($J.Provider,{value:$.onNavigate,children:F.jsx(F$.Provider,{value:$.config,children:F.jsx(S.Provider,{value:$.onError,children:F.jsx(m.QueryClientProvider,{client:Z,children:F.jsx(sJ,{...$})})})})})},HJ=oJ;var o=require("react");var M=require("react");function QJ($){return $.wasRecovering===!0&&$.recovered===!1}function TJ($){return $.recoverable===!1}function _J($,J,Z){let G=$.getSubscription(J);if(G)return{subscription:G,createdHere:!1};return{subscription:$.newSubscription(J,Z),createdHere:!0}}var iJ=require("react");var qJ=new Map,UJ=($,J)=>{qJ.set($,J)},WJ=($)=>{qJ.delete($)};var g=require("react/jsx-runtime"),aJ=({card:$,data:J,children:Z,useSocketioSupport:G=!1,useCentrifugeSupport:Y=!1,useMittSupport:X=!1,centrifugeChannel:z=void 0,methods:Q=void 0,stored:B=void 0,onResync:U=void 0})=>{let H=S$(),W=M.useRef(Q);W.current=Q;let V=M.useRef(U);V.current=U;let D=M.useRef(B);D.current=B;let K=typeof B==="function";if(M.useEffect(()=>{if(!K)return;let O=J.name;return UJ(O,()=>[JSON.stringify(D.current())]),()=>WJ(O)},[K,J.name]),H)console.log("[PieCard] Rendering card:",$),console.log("[PieCard] Card data:",J),console.log("[PieCard] Component name:",J?.name),console.log("[PieCard] Real-time support:",{socketio:G,centrifuge:Y,mitt:X,centrifugeChannel:z}),console.log("[PieCard] Methods:",Q?Object.keys(Q):"none"),console.log("[PieCard] Has children:",!!Z);let j=M.useContext(y),I=M.useContext(C),N=M.useContext(n);if(M.useEffect(()=>{if(!j||!G||!W.current||!J.name){if(H&&G)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!j,useSocketioSupport:G,hasMethods:!!W.current,hasDataName:!!J?.name});return}let A=Object.keys(W.current??{}).map((_)=>{let q=`pie${_}_${J.name}`;if(H)console.log(`[PieCard] Socket.IO registering event: ${q}`);let P=(w)=>{W.current?.[_]?.(w)};return j.on(q,P),[q,P]});return()=>{A.forEach(([_,q])=>{if(H)console.log(`[PieCard] Socket.IO unregistering event: ${_}`);j.off(_,q)})}},[j,J.name,G]),M.useEffect(()=>{if(!I||!Y||!z||!J.name){if(H&&Y)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!I,useCentrifugeSupport:Y,hasCentrifugeChannel:!!z,hasMethods:!!W.current,hasDataName:!!J?.name});return}let A=Object.keys(W.current??{}).map((_)=>{let q=`pie${_}_${J.name}_${z}`;if(H)console.log(`[PieCard] Centrifuge subscribing to channel: ${q}`);let{subscription:P,createdHere:w}=_J(I,q,{recoverable:!0,positioned:!0}),O$=(p)=>{if(H)console.log(`[PieCard] Centrifuge received data on ${q}:`,p.data);W.current?.[_]?.(p.data)},P$=(p)=>{if(TJ(p))console.warn(`[PieCard] Centrifuge channel ${q} is not `+"recoverable — enable history on the server "+"namespace for exact replay; relying on resync fallback only.");if(QJ(p)){if(H)console.log(`[PieCard] Centrifuge recovery gap on ${q}; requesting resync`);V.current?.({channel:q,reason:"gap"})}};return P.on("publication",O$),P.on("subscribed",P$),P.subscribe(),{subscription:P,createdHere:w,onPublication:O$,onSubscribed:P$}});return()=>{A.forEach(({subscription:_,createdHere:q,onPublication:P,onSubscribed:w})=>{if(H)console.log("[PieCard] Centrifuge unsubscribing from channel");if(_.off("publication",P),_.off("subscribed",w),q)_.unsubscribe(),I.removeSubscription(_)})}},[I,z,J.name,Y]),M.useEffect(()=>{if(!N||!X||!J.name){if(H&&X)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!N,useMittSupport:X,hasMethods:!!W.current,hasDataName:!!J?.name});return}let O=Object.keys(W.current??{}),A={};return O.forEach((_)=>{let q=`pie${_}_${J.name}`,P=(w)=>{if(H)console.log(`[PieCard] Mitt registering event: ${q}`);W.current?.[_]?.(w)};A[q]=P,N.on(q,P)}),()=>{Object.entries(A).forEach(([_,q])=>{if(H)console.log(`[PieCard] Mitt unregistering event: ${_}`);N.off(_,q)})}},[N,J.name,X]),H)console.log("[PieCard] Rendering complete, returning children");if(B!==void 0&&!K)return g.jsxs(g.Fragment,{children:[g.jsx("input",{type:"hidden",name:J.name,value:JSON.stringify(B)}),Z]});return Z},q$=aJ;var M$=require("react/jsx-runtime"),nJ=({data:$})=>{let{name:J,key:Z,value:G,useSocketioSupport:Y,useCentrifugeSupport:X,useMittSupport:z,centrifugeChannel:Q}=$,[B,U]=o.useState(G);return o.useEffect(()=>{U(G)},[G]),o.useEffect(()=>{if(typeof window>"u")return;let H=window.Telegram?.WebApp?.CloudStorage;if(!H)return;H.setItem(Z,B)},[Z,B]),M$.jsx(q$,{card:"CloudStorageCard",data:$,useSocketioSupport:Y,useCentrifugeSupport:X,useMittSupport:z,centrifugeChannel:Q,methods:{update:({value:H})=>{U(H)},remove:()=>{let H=window.Telegram?.WebApp?.CloudStorage;if(H)H.removeItem(Z);U("")}},children:M$.jsx("input",{type:"hidden",id:J,name:J,value:B})})},FJ=nJ;var VJ=B$({name:"CloudStorageCard",component:FJ,metadata:{author:"PieData"}});var i=require("react");var I$=require("react/jsx-runtime"),rJ=({data:$})=>{let{name:J,key:Z,value:G,useSocketioSupport:Y,useCentrifugeSupport:X,useMittSupport:z,centrifugeChannel:Q}=$,[B,U]=i.useState(G);return i.useEffect(()=>{U(G)},[G]),i.useEffect(()=>{if(typeof window>"u")return;let H=window.Telegram?.WebApp?.SecureStorage;if(!H)return;H.setItem(Z,B)},[Z,B]),I$.jsx(q$,{card:"SecureStorageCard",data:$,useSocketioSupport:Y,useCentrifugeSupport:X,useMittSupport:z,centrifugeChannel:Q,methods:{update:({value:H})=>{U(H)},remove:()=>{let H=window.Telegram?.WebApp?.SecureStorage;if(H)H.removeItem(Z);U("")}},children:I$.jsx("input",{type:"hidden",id:J,name:J,value:B})})},DJ=rJ;var KJ=B$({name:"SecureStorageCard",component:DJ,metadata:{author:"PieData"}});
|
|
2
|
+
var OJ=Object.create;var{getPrototypeOf:PJ,defineProperty:c,getOwnPropertyNames:j$,getOwnPropertyDescriptor:AJ}=Object,N$=Object.prototype.hasOwnProperty;var jJ=($,J,Z)=>{Z=$!=null?OJ(PJ($)):{};let G=J||!$||!$.__esModule?c(Z,"default",{value:$,enumerable:!0}):Z;for(let Y of j$($))if(!N$.call(G,Y))c(G,Y,{get:()=>$[Y],enumerable:!0});return G},A$=new WeakMap,NJ=($)=>{var J=A$.get($),Z;if(J)return J;if(J=c({},"__esModule",{value:!0}),$&&typeof $==="object"||typeof $==="function")j$($).map((G)=>!N$.call(J,G)&&c(J,G,{get:()=>$[G],enumerable:!(Z=AJ($,G))||Z.enumerable}));return A$.set($,J),J};var LJ=($,J)=>{for(var Z in J)c($,Z,{get:J[Z],enumerable:!0,configurable:!0,set:(G)=>J[Z]=()=>G})};var $Z={};LJ($Z,{useWebApp:()=>l,useInitData:()=>t$,SecureStorageCard:()=>IJ,PieTelegramRoot:()=>TJ,CloudStorageCard:()=>DJ});module.exports=NJ($Z);var h=require("react"),m=require("@tanstack/react-query");var L$=jJ(require("mitt")),a=require("react");var q$=globalThis,W=($,J)=>{let Z=Symbol.for($);if(!(Z in q$))q$[Z]=J();return q$[Z]};function R$(){return W("@swarm.ing/pieui:mitt-emitter",()=>L$.default())}var RJ=W("@swarm.ing/pieui:context:mitt",()=>a.createContext(null));var n=RJ;var E$=require("socket.io-client"),x$=require("react");var w$=W("@swarm.ing/pieui:socket-cache",()=>new Map),C$=($)=>{let J=w$.get($);if(J)return J;let Z=E$.io($,{autoConnect:!1,transports:["websocket"]});return w$.set($,Z),Z},wJ=W("@swarm.ing/pieui:context:socket",()=>x$.createContext(null)),C=wJ;var b$=require("react"),U$=require("centrifuge");var y$=W("@swarm.ing/pieui:centrifuge-cache",()=>new Map),k$=($,J)=>{if(!J)return null;let Z=`${$}::${J}`,G=y$.get(Z);if(G)return G;async function Y(){let H=await fetch($+"api/centrifuge/gen_token",{credentials:"include"});if(!H.ok){if(H.status===401||H.status===403)throw new U$.Centrifuge.UnauthorizedError("Backend is not answering");throw Error(`Unexpected status code ${H.status}`)}return(await H.json()).token}let X=new U$.Centrifuge(J,{getToken:Y});return y$.set(Z,X),X},EJ=W("@swarm.ing/pieui:context:centrifuge",()=>b$.createContext(null)),y=EJ;var L=require("react");var e=require("react"),r=new Map,t=new Map;function $$($,J){let Z=`${$}::${J}`,G=$?r.get(Z):void 0,[Y,X]=e.useState(G??null);return e.useEffect(()=>{if(!$)return;if(r.has(Z)){X(r.get(Z));return}let H=t.get(Z);if(!H)H=fetch($+`api/support/${J}`,{method:"GET"}).then((B)=>B.json()).then((B)=>{return r.set(Z,B),t.delete(Z),B}).catch((B)=>{throw t.delete(Z),B}),t.set(Z,H);let Q=!1;return H.then((B)=>{if(!Q)X(B)}).catch(()=>{}),()=>{Q=!0}},[$,J,Z]),Y}var J$=require("react");var F$=W("@swarm.ing/pieui:context:pieConfig",()=>J$.createContext(null)),b=()=>{let $=J$.useContext(F$);if(!$)throw Error("usePieConfig must be used within PieConfigProvider");return $},V$=()=>{let{apiServer:$}=b();return $},Z$=V$,S$=()=>{let{centrifugeServer:$}=b();return $};var E=()=>{let{enableRenderingLog:$}=b();return $},v$=E,f$=()=>{let{pageProcessor:$}=b();return $};var G$=()=>{let{onLinkLost:$}=b();return $},X$=()=>{let{onLinkRestored:$}=b();return $};var xJ=($)=>{let J=document.cookie?document.cookie.split(";"):[];for(let Z of J){let G=Z.indexOf("=");if((G===-1?Z:Z.slice(0,G)).trim()===$){let X=G===-1?"":Z.slice(G+1).trim();try{return decodeURIComponent(X)}catch{return X}}}return null},CJ={isClient(){return typeof window<"u"&&typeof document<"u"},readSid(){return typeof window>"u"?void 0:window.sid},setSid($){if(typeof window<"u")window.sid=$},readWebStorage($,J){return($==="local"?window.localStorage:window.sessionStorage).getItem(J)},readCookie:xJ,readUrlParams($){return new URLSearchParams(window.location.search).getAll($)},readDomInput($){let J=document.getElementsByName($);if(!J.length)return null;let Z=J[0];if(Z instanceof HTMLInputElement){if(Z.type==="file"&&Z.files)return Array.from(Z.files);return[Z.value]}if(Z instanceof HTMLTextAreaElement)return[Z.value];return[]},submitGlobalForm(){if(typeof document>"u")return;let $=document.getElementById("piedata_global_form");$&&$.submit()}},h$=CJ;var yJ={};function x(){return yJ}var m$=new Map;var g$=($)=>{return m$.has($)?m$.get($):null};var p$,bJ={isClient(){return!0},readSid(){return p$},setSid($){p$=$},readWebStorage($,J){let Z=x(),G=$==="local"?Z.storage:Z.sessionStorage;return G?G.getItem(J):null},async readWebStorageAsync($,J){let Z=x(),G=$==="local"?Z.asyncStorage:Z.asyncSessionStorage;if(G)return G.getItem(J);let Y=$==="local"?Z.storage:Z.sessionStorage;return Y?Y.getItem(J):null},readCookie($){let J=x();return J.getCookie?J.getCookie($):null},readUrlParams($){let J=x();return J.getRouteParams?J.getRouteParams($):[]},readDomInput($){let J=x();return J.getInput?J.getInput($):g$($)},submitGlobalForm(){x().submitForm?.()}},c$=bJ;var kJ=typeof navigator<"u"&&navigator.product==="ReactNative",SJ=kJ?c$:h$,Y$=SJ;var vJ=W("@swarm.ing/pieui:sid-state",()=>({promise:null,resolve:null}));function u$(){vJ.resolve?.()}function k($,J){if(J==="up")return{state:"up",signal:$==="down"?"restored":null};return{state:"down",signal:$==="up"?"lost":null}}var fJ=({children:$})=>{let J=L.useContext(C),Z=Z$(),G=$$(Z,"socketIO"),Y=G$(),X=X$(),H=L.useRef(Y);H.current=Y;let Q=L.useRef(X);Q.current=X;let B=L.useRef("initial"),T=(z)=>{if(Y$.isClient())Y$.setSid(z.sid),u$(),console.log(`SocketIO initialized: ${Y$.readSid()}`)};return L.useEffect(()=>{if(!J||!G)return;let z=()=>{let{state:V,signal:D}=k(B.current,"up");if(B.current=V,D==="restored")Q.current?.("socketio");console.log("SocketIO connected")},U=(V)=>{if(console.log(`SocketIO disconnected: ${V}`),J.connect(),V==="io client disconnect")return;let{state:D,signal:P}=k(B.current,"down");if(B.current=D,P==="lost")H.current?.("socketio",V)};return J.on("pieinit",T),J.on("connect",z),J.on("disconnect",U),J.connect(),()=>{J.off("pieinit",T),J.off("connect",z),J.off("disconnect",U),J.disconnect()}},[J,G]),$},d$=fJ;var R=require("react");var hJ=({children:$})=>{let J=R.useContext(y),Z=Z$(),G=$$(Z,"centrifuge"),Y=G$(),X=X$(),H=R.useRef(Y);H.current=Y;let Q=R.useRef(X);Q.current=X;let B=R.useRef("initial");return R.useEffect(()=>{if(!J||!G)return;let T=(V)=>{let{state:D,signal:P}=k(B.current,"down");if(B.current=D,P==="lost")H.current?.("centrifuge",V)},z=()=>{let{state:V,signal:D}=k(B.current,"up");if(B.current=V,D==="restored")Q.current?.("centrifuge");console.log("Centrifuge connected")},U=(V)=>{console.log("Centrifuge disconnected:",V),T(V)};return J.on("connecting",T),J.on("connected",z),J.on("disconnected",U),J.connect(),()=>{J.off("connecting",T),J.off("connected",z),J.off("disconnected",U),J.disconnect()}},[J,G]),$},l$=hJ;var s$=require("react");var z$=require("react/jsx-runtime"),mJ=W("@swarm.ing/pieui:context:fallback",()=>s$.createContext(z$.jsx(z$.Fragment,{}))),S=mJ;var o$=require("react");var gJ=W("@swarm.ing/pieui:context:lazyError",()=>o$.createContext(void 0)),v=gJ;var i$=require("react"),u=new Map;function pJ($,J){return J.catch(()=>{if(u.get($)===J)u.delete($)}),u.set($,J),J}function a$($,J){return i$.lazy(()=>{if(u.has(J))return u.get(J);return pJ(J,$().then((Z)=>Z))})}var n$=W("@swarm.ing/pieui:component-registry",()=>new Map),cJ=($)=>{if(!$.name)throw Error("Component registration requires a name");if(!$.component&&!$.loader)throw Error(`Component "${$.name}" requires component or loader`);let J={name:$.name,component:$.component,loader:$.loader,metadata:$.metadata,fallback:$.fallback,isLazy:!1};if(!J.component&&J.loader)J.component=a$(J.loader,$.name),J.isLazy=!0;return J};function B$($){let J=cJ($);return n$.set(J.name,J),J.component}var Q$=($)=>{return n$.get($)};var d=require("react");var H$=require("react"),r$=require("react/jsx-runtime"),uJ=2,dJ=400;class f extends H$.Component{state={failed:!1,attempt:0};timer;static getDerivedStateFromError(){return{failed:!0}}componentDidCatch($){if(this.props.onError?.($),this.state.attempt<uJ){let J=dJ*(this.state.attempt+1);this.timer=setTimeout(()=>{this.setState((Z)=>({failed:!1,attempt:Z.attempt+1}))},J)}}componentDidUpdate($){if($.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 r$.jsx(H$.Suspense,{fallback:this.props.fallback,children:this.props.children},`${this.props.name}:${this.state.attempt}`)}}var T$=require("react/jsx-runtime");function lJ({uiConfig:$,setUiAjaxConfiguration:J}){let Z=d.useContext(S),G=d.useContext(v),Y=E();if(Y)console.log("[UI] Rendering component:",$.card),console.log("[UI] Component data:",$.data),console.log("[UI] Component content:",$.content),console.log("[UI] Has setUiAjaxConfiguration:",!!J);let X=Q$($.card);if(!X?.component){if(Y)console.warn(`[UI] Component not found in registry: ${$.card}`),console.log("[UI] Returning fallback component");return Z}if(Y)console.log("[UI] Found component in registry:",{name:X.name,isLazy:X.isLazy,hasMetadata:!!X.metadata});let H=X.component,Q=T$.jsx(H,{data:$.data,content:$.content,setUiAjaxConfiguration:J});if(X.isLazy){if(Y)console.log("[UI] Rendering lazy component with Suspense:",X.name);return T$.jsx(f,{name:X.name,fallback:X.fallback?T$.jsx(X.fallback,{}):Z,onError:G,children:Q})}if(Y)console.log("[UI] Rendering component directly:",X.name);return Q}var K$=d.memo(lJ);var HJ=require("axios-date-transformer");var _$=require("react");var l=({onError:$}={})=>{let[J,Z]=_$.useState(null),G=f$();return _$.useEffect(()=>{if(typeof window>"u")return;let Y=window.Telegram?.WebApp;if(!Y)return;try{Y.ready?.()}catch(X){$?.()}if(G==="telegram_expanded"&&(Y.platform==="ios"||Y.platform==="android"))Y.expand();Z(Y)},[]),J},t$=()=>{let $=l();return[$?.initDataUnsafe,$?.initData]};var e$=require("react");var sJ=W("@swarm.ing/pieui:context:navigate",()=>e$.createContext(void 0)),$J=sJ;var D$=require("react");var JJ=require("react");var oJ=W("@swarm.ing/pieui:context:uiRenderer",()=>JJ.createContext(null)),ZJ=oJ;var s=require("react/jsx-runtime");function GJ({uiConfig:$,setUiAjaxConfiguration:J}){let Z=D$.useContext(S),G=D$.useContext(v),Y=E();if(Y)console.log("[UILoading] Rendering fallback for:",$.card),console.log("[UILoading] Component data:",$.data),console.log("[UILoading] Component content:",$.content),console.log("[UILoading] Has setUiAjaxConfiguration:",!!J);let X=Q$($.card);if(!X?.component){if(Y)console.warn(`[UILoading] Component not found in registry: ${$.card}`),console.log("[UILoading] Returning fallback component");return Z}if(Y)console.log("[UILoading] Found component in registry:",{name:X.name,isLazy:X.isLazy,hasMetadata:!!X.metadata,hasFallback:!!X.fallback});if(X.fallback){if(Y)console.log("[UILoading] Rendering fallback for:",X.name);let B=X.fallback;return s.jsx(B,{})}if(Y)console.log("[UILoading] No fallback, rendering full component:",X.name);let H=X.component,Q=s.jsx(ZJ.Provider,{value:GJ,children:s.jsx(H,{data:$.data,content:$.content,setUiAjaxConfiguration:J})});if(X.isLazy)return s.jsx(f,{name:X.name,fallback:Z,onError:G,children:Q});return Q}var XJ=GJ;var zJ=require("react/jsx-runtime");function YJ($,J,Z){if(!J)return Z;let G=$.replace(/^\//,""),Y=J[G];if(!Y)return Z;return zJ.jsx(XJ,{uiConfig:Y})}function BJ({apiServer:$,pathname:J,search:Z,root:G,initData:Y}){let X=new URLSearchParams(Z);if(X.set("__pieroot",G),Y)X.set("initData",Y);return`${$.replace(/\/$/,"")}/api/content${J}?${X.toString()}`}async function QJ($,J){if(!$||$.used||$.url!==J)return null;$.used=!0;try{return await $.promise}catch{return null}}var F=require("react/jsx-runtime"),iJ=({location:$,fallback:J,piecache:Z,onError:G,queryOptions:Y,configPrefetch:X,disableGlobalForm:H})=>{let Q=V$(),B=S$(),T=E(),z=h.useMemo(()=>HJ.createAxiosDateTransformer({baseURL:Q}),[Q]),U=h.useMemo(()=>R$(),[]),V=h.useMemo(()=>Q?C$(Q):null,[Q]),D=h.useMemo(()=>Q?k$(Q,B):null,[Q,B]),P=l({onError:G}),{data:A,isLoading:N,error:M}=m.useQuery({queryKey:["uiConfig",$.pathname+$.search,P?.initData],enabled:!!P?.initData,queryFn:async()=>{let I=BJ({apiServer:Q,pathname:$.pathname,search:$.search,root:"telegram",initData:P?.initData}),q=await QJ(X,I);if(q){if(T)console.log("[PieRoot] Using prefetched UI configuration");return q}if(T)console.log("[PieRoot] Fetching UI configuration from:",I);let _=await z.get(I,{withCredentials:!0});if(T)console.log("[PieRoot] Received UI configuration:",_.data);return _.data},staleTime:1/0,gcTime:1/0,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,retry:!0,retryDelay:(I)=>Math.min(1000*2**I,30000),...Y}),j=YJ($.pathname,Z,J);if(!Q)throw Error("Set PIE_API_SERVER and PIE_CENTRIFUGE_SERVER");if(M&&T)return console.error("[PieRoot] Error fetching UI configuration:",M),console.error("[PieRoot] Error details:",{message:M.message,status:M.response?.status,data:M.response?.data}),G?.(M),j;if(N||!A){if(T)console.log("[PieRoot] Loading state:",{isLoading:N,hasUiConfiguration:!!A});return j}if(T)console.log("[PieRoot] UI configuration loaded successfully:",A),console.log("[PieRoot] Rendering UI with configuration");return F.jsx(n.Provider,{value:U,children:F.jsx(C.Provider,{value:V,children:F.jsx(y.Provider,{value:D,children:F.jsx(S.Provider,{value:J??F.jsx(F.Fragment,{}),children:F.jsx(d$,{children:F.jsx(l$,{children:H?F.jsx(K$,{uiConfig:A}):F.jsx("form",{id:"piedata_global_form",action:Q+"api/process"+$.pathname,method:"post",encType:"multipart/form-data",children:F.jsx(K$,{uiConfig:A})})})})})})})})},aJ=($)=>{let J=h.useMemo(()=>new m.QueryClient,[]),Z=$.queryClient??J;return F.jsx($J.Provider,{value:$.onNavigate,children:F.jsx(F$.Provider,{value:$.config,children:F.jsx(v.Provider,{value:$.onError,children:F.jsx(m.QueryClientProvider,{client:Z,children:F.jsx(iJ,{...$})})})})})},TJ=aJ;var o=require("react");var K=require("react");function _J($){return $.wasRecovering===!0&&$.recovered===!1}function WJ($){return $.recoverable===!1}function qJ($,J,Z){let G=$.getSubscription(J);if(G)return{subscription:G,createdHere:!1};return{subscription:$.newSubscription(J,Z),createdHere:!0}}var nJ=require("react");var UJ=new Map,FJ=($,J)=>{UJ.set($,J)},VJ=($)=>{UJ.delete($)};var g=require("react/jsx-runtime"),rJ=({card:$,data:J,children:Z,useSocketioSupport:G=!1,useCentrifugeSupport:Y=!1,useMittSupport:X=!1,centrifugeChannel:H=void 0,methods:Q=void 0,stored:B=void 0,onResync:T=void 0})=>{let z=v$(),U=K.useRef(Q);U.current=Q;let V=K.useRef(T);V.current=T;let D=K.useRef(B);D.current=B;let P=typeof B==="function";if(K.useEffect(()=>{if(!P)return;let j=J.name;return FJ(j,()=>[JSON.stringify(D.current())]),()=>VJ(j)},[P,J.name]),z)console.log("[PieCard] Rendering card:",$),console.log("[PieCard] Card data:",J),console.log("[PieCard] Component name:",J?.name),console.log("[PieCard] Real-time support:",{socketio:G,centrifuge:Y,mitt:X,centrifugeChannel:H}),console.log("[PieCard] Methods:",Q?Object.keys(Q):"none"),console.log("[PieCard] Has children:",!!Z);let A=K.useContext(C),N=K.useContext(y),M=K.useContext(n);if(K.useEffect(()=>{if(!A||!G||!U.current||!J.name){if(z&&G)console.log("[PieCard] Socket.IO setup skipped:",{hasSocket:!!A,useSocketioSupport:G,hasMethods:!!U.current,hasDataName:!!J?.name});return}let I=Object.keys(U.current??{}).map((q)=>{let _=`pie${q}_${J.name}`;if(z)console.log(`[PieCard] Socket.IO registering event: ${_}`);let O=(w)=>{U.current?.[q]?.(w)};return A.on(_,O),[_,O]});return()=>{I.forEach(([q,_])=>{if(z)console.log(`[PieCard] Socket.IO unregistering event: ${q}`);A.off(q,_)})}},[A,J.name,G]),K.useEffect(()=>{if(!N||!Y||!H||!J.name){if(z&&Y)console.log("[PieCard] Centrifuge setup skipped:",{hasCentrifuge:!!N,useCentrifugeSupport:Y,hasCentrifugeChannel:!!H,hasMethods:!!U.current,hasDataName:!!J?.name});return}let I=Object.keys(U.current??{}).map((q)=>{let _=`pie${q}_${J.name}_${H}`;if(z)console.log(`[PieCard] Centrifuge subscribing to channel: ${_}`);let{subscription:O,createdHere:w}=qJ(N,_,{recoverable:!0,positioned:!0}),O$=(p)=>{if(z)console.log(`[PieCard] Centrifuge received data on ${_}:`,p.data);U.current?.[q]?.(p.data)},P$=(p)=>{if(WJ(p))console.warn(`[PieCard] Centrifuge channel ${_} is not `+"recoverable — enable history on the server "+"namespace for exact replay; relying on resync fallback only.");if(_J(p)){if(z)console.log(`[PieCard] Centrifuge recovery gap on ${_}; requesting resync`);V.current?.({channel:_,reason:"gap"})}};return O.on("publication",O$),O.on("subscribed",P$),O.subscribe(),{subscription:O,createdHere:w,onPublication:O$,onSubscribed:P$}});return()=>{I.forEach(({subscription:q,createdHere:_,onPublication:O,onSubscribed:w})=>{if(z)console.log("[PieCard] Centrifuge unsubscribing from channel");if(q.off("publication",O),q.off("subscribed",w),_)q.unsubscribe(),N.removeSubscription(q)})}},[N,H,J.name,Y]),K.useEffect(()=>{if(!M||!X||!J.name){if(z&&X)console.log("[PieCard] Mitt setup skipped:",{hasMitt:!!M,useMittSupport:X,hasMethods:!!U.current,hasDataName:!!J?.name});return}let j=Object.keys(U.current??{}),I={};return j.forEach((q)=>{let _=`pie${q}_${J.name}`,O=(w)=>{if(z)console.log(`[PieCard] Mitt registering event: ${_}`);U.current?.[q]?.(w)};I[_]=O,M.on(_,O)}),()=>{Object.entries(I).forEach(([q,_])=>{if(z)console.log(`[PieCard] Mitt unregistering event: ${q}`);M.off(q,_)})}},[M,J.name,X]),z)console.log("[PieCard] Rendering complete, returning children");if(B!==void 0&&!P)return g.jsxs(g.Fragment,{children:[g.jsx("input",{type:"hidden",name:J.name,value:JSON.stringify(B)}),Z]});return Z},W$=rJ;var M$=require("react/jsx-runtime"),tJ=({data:$})=>{let{name:J,key:Z,value:G,useSocketioSupport:Y,useCentrifugeSupport:X,useMittSupport:H,centrifugeChannel:Q}=$,[B,T]=o.useState(G);return o.useEffect(()=>{T(G)},[G]),o.useEffect(()=>{if(typeof window>"u")return;let z=window.Telegram?.WebApp?.CloudStorage;if(!z)return;z.setItem(Z,B)},[Z,B]),M$.jsx(W$,{card:"CloudStorageCard",data:$,useSocketioSupport:Y,useCentrifugeSupport:X,useMittSupport:H,centrifugeChannel:Q,methods:{update:({value:z})=>{T(z)},remove:()=>{let z=window.Telegram?.WebApp?.CloudStorage;if(z)z.removeItem(Z);T("")}},children:M$.jsx("input",{type:"hidden",id:J,name:J,value:B})})},KJ=tJ;var DJ=B$({name:"CloudStorageCard",component:KJ,metadata:{author:"PieData"}});var i=require("react");var I$=require("react/jsx-runtime"),eJ=({data:$})=>{let{name:J,key:Z,value:G,useSocketioSupport:Y,useCentrifugeSupport:X,useMittSupport:H,centrifugeChannel:Q}=$,[B,T]=i.useState(G);return i.useEffect(()=>{T(G)},[G]),i.useEffect(()=>{if(typeof window>"u")return;let z=window.Telegram?.WebApp?.SecureStorage;if(!z)return;z.setItem(Z,B)},[Z,B]),I$.jsx(W$,{card:"SecureStorageCard",data:$,useSocketioSupport:Y,useCentrifugeSupport:X,useMittSupport:H,centrifugeChannel:Q,methods:{update:({value:z})=>{T(z)},remove:()=>{let z=window.Telegram?.WebApp?.SecureStorage;if(z)z.removeItem(Z);T("")}},children:I$.jsx("input",{type:"hidden",id:J,name:J,value:B})})},MJ=eJ;var IJ=B$({name:"SecureStorageCard",component:MJ,metadata:{author:"PieData"}});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for `util/contentRequest.ts`.
|
|
3
|
+
*
|
|
4
|
+
* Two things here are worth guarding with tests.
|
|
5
|
+
*
|
|
6
|
+
* `buildContentUrl` is the single rule for assembling the page-config URL, and
|
|
7
|
+
* the whole prefetch mechanism hinges on it: the host warms a URL before the
|
|
8
|
+
* bundle loads and the root matches it by exact string. Any drift — parameter
|
|
9
|
+
* order, a stray slash, encoding — silently costs a second round trip instead
|
|
10
|
+
* of failing loudly, so the exact output is asserted rather than merely parsed.
|
|
11
|
+
*
|
|
12
|
+
* `consumeConfigPrefetch` guards a cache: it must hand the warmed response over
|
|
13
|
+
* exactly once and never substitute it for a different URL or a refetch.
|
|
14
|
+
*/
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=contentRequest.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contentRequest.test.d.ts","sourceRoot":"","sources":["../../src/tests/contentRequest.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
|
|
@@ -25,7 +25,19 @@ export type GetAjaxSubmitOptions = {
|
|
|
25
25
|
timeout?: number;
|
|
26
26
|
/** Retry policy for failed requests. No retries if omitted. */
|
|
27
27
|
retryPolicy?: RetryPolicy;
|
|
28
|
+
/**
|
|
29
|
+
* Extra `fetch` options merged into every request the submit function
|
|
30
|
+
* makes (`headers`, `credentials`, `mode`, `cache`, a caller `signal`, …).
|
|
31
|
+
* `body` is ignored — it is always the collected FormData. See
|
|
32
|
+
* {@link buildRequestInit} for how the merge works.
|
|
33
|
+
*/
|
|
34
|
+
fetchOptions?: RequestInit;
|
|
28
35
|
};
|
|
36
|
+
/**
|
|
37
|
+
* Submit function returned by {@link getAjaxSubmit}. `fetchOptions` given here
|
|
38
|
+
* override the ones passed when the submit function was built.
|
|
39
|
+
*/
|
|
40
|
+
export type AjaxSubmitFn = (extraKwargs?: Record<string, any>, fetchOptions?: RequestInit) => Promise<any>;
|
|
29
41
|
/**
|
|
30
42
|
* The origin a dep value is read from. `dom` is the default for any name
|
|
31
43
|
* without a recognized prefix.
|
|
@@ -148,10 +160,14 @@ export declare const readAjaxKeyAsync: (depName: string, renderingLogEnabled?: b
|
|
|
148
160
|
* `url:`, `telegram:cloud:` and `telegram:secure:`
|
|
149
161
|
* prefixes read those client sources.
|
|
150
162
|
* @param pathname Path segment appended to `api/ajax_content`.
|
|
151
|
-
* @param options See {@link GetAjaxSubmitOptions}
|
|
152
|
-
*
|
|
163
|
+
* @param options See {@link GetAjaxSubmitOptions}, including
|
|
164
|
+
* `fetchOptions` — arbitrary `fetch` init merged
|
|
165
|
+
* into every request (see
|
|
166
|
+
* {@link buildRequestInit}).
|
|
167
|
+
* @returns An {@link AjaxSubmitFn}: `async (extraKwargs?, fetchOptions?)`,
|
|
168
|
+
* where the call-time `fetchOptions` win over the ones given here.
|
|
153
169
|
*/
|
|
154
|
-
export declare const getAjaxSubmit: (setUiAjaxConfiguration?: SetUiAjaxConfigurationType, kwargs?: Record<string, any>, depsNames?: Array<string>, pathname?: string, options?: GetAjaxSubmitOptions) =>
|
|
170
|
+
export declare const getAjaxSubmit: (setUiAjaxConfiguration?: SetUiAjaxConfigurationType, kwargs?: Record<string, any>, depsNames?: Array<string>, pathname?: string, options?: GetAjaxSubmitOptions) => AjaxSubmitFn;
|
|
155
171
|
/**
|
|
156
172
|
* React hook wrapper around {@link getAjaxSubmit}. Reads `apiServer` and
|
|
157
173
|
* `enableRenderingLog` from {@link usePieConfig} and memoizes the submit
|
|
@@ -164,13 +180,19 @@ export declare const getAjaxSubmit: (setUiAjaxConfiguration?: SetUiAjaxConfigura
|
|
|
164
180
|
* @param depsNames Names of DOM inputs whose current values should
|
|
165
181
|
* be sent alongside the request.
|
|
166
182
|
* @param pathname Path segment appended to `api/ajax_content`.
|
|
167
|
-
* @param options Optional `timeout` (ms)
|
|
183
|
+
* @param options Optional `timeout` (ms), `retryPolicy` and
|
|
184
|
+
* `fetchOptions`. Since memoization is keyed on
|
|
185
|
+
* the stringified options, pass values that
|
|
186
|
+
* survive `JSON.stringify` here — a per-call
|
|
187
|
+
* `AbortSignal` belongs in the submit call's own
|
|
188
|
+
* `fetchOptions` argument instead.
|
|
168
189
|
* @returns A memoized submit function; see {@link getAjaxSubmit}.
|
|
169
190
|
*/
|
|
170
191
|
export declare const useAjaxSubmit: (setUiAjaxConfiguration?: SetUiAjaxConfigurationType, kwargs?: Record<string, any>, depsNames?: Array<string>, pathname?: string, options?: {
|
|
171
192
|
timeout?: number;
|
|
172
193
|
retryPolicy?: RetryPolicy;
|
|
173
|
-
|
|
194
|
+
fetchOptions?: RequestInit;
|
|
195
|
+
}) => AjaxSubmitFn;
|
|
174
196
|
/** One ajax endpoint's submit config, discovered from a card's `data`. */
|
|
175
197
|
export type AjaxEndpointConfig = {
|
|
176
198
|
/** `'default'` for the primary `pathname`, else the field prefix (`search`). */
|
|
@@ -196,5 +218,6 @@ export declare const discoverAjaxEndpoints: (data?: Record<string, any>) => Arra
|
|
|
196
218
|
export declare const useAjaxSubmits: (data?: Record<string, any>, setUiAjaxConfiguration?: SetUiAjaxConfigurationType, options?: {
|
|
197
219
|
timeout?: number;
|
|
198
220
|
retryPolicy?: RetryPolicy;
|
|
199
|
-
|
|
221
|
+
fetchOptions?: RequestInit;
|
|
222
|
+
}) => Record<string, AjaxSubmitFn>;
|
|
200
223
|
//# sourceMappingURL=ajaxCommonUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ajaxCommonUtils.d.ts","sourceRoot":"","sources":["../../src/util/ajaxCommonUtils.ts"],"names":[],"mappings":"AAEA,OAAO,UAAU,CAAA;AACjB,OAAO,EAAE,0BAA0B,EAAe,MAAM,UAAU,CAAA;AAMlE;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACtB,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kJAAkJ;IAClJ,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG;IAC/B,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,uEAAuE;IACvE,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"ajaxCommonUtils.d.ts","sourceRoot":"","sources":["../../src/util/ajaxCommonUtils.ts"],"names":[],"mappings":"AAEA,OAAO,UAAU,CAAA;AACjB,OAAO,EAAE,0BAA0B,EAAe,MAAM,UAAU,CAAA;AAMlE;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACtB,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kJAAkJ;IAClJ,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG;IAC/B,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,uEAAuE;IACvE,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,WAAW,CAAA;CAC7B,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CACvB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjC,YAAY,CAAC,EAAE,WAAW,KACzB,OAAO,CAAC,GAAG,CAAC,CAAA;AAEjB;;;GAGG;AACH,MAAM,MAAM,SAAS,GACf,KAAK,GACL,KAAK,GACL,cAAc,GACd,gBAAgB,GAChB,QAAQ,GACR,KAAK,GACL,gBAAgB,GAChB,iBAAiB,CAAA;AAmBvB;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,MACvB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GACpB,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAA;AAInC,iEAAiE;AACjE,eAAO,MAAM,sBAAsB,SACzB,MAAM,YACF,cAAc,KACzB,IAEF,CAAA;AAED,iFAAiF;AACjF,eAAO,MAAM,wBAAwB,SAAU,MAAM,KAAG,IAEvD,CAAA;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,0BAA0B,YAC3B,MAAM,GAAG,WAAW,KAC7B,IAkCF,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,YAAY,YACZ,MAAM,KAChB;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAWlC,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,WAAW,YACX,MAAM,wBACM,OAAO,KAC7B,KAAK,CAAC,MAAM,GAAG,IAAI,CAgFrB,CAAA;AAwDD;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,YAChB,MAAM,wBACM,OAAO,KAC7B,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAmC9B,CAAA;AAqGD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,eAAO,MAAM,aAAa,4BACG,0BAA0B,WAC3C,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,cAChB,KAAK,CAAC,MAAM,CAAC,aACb,MAAM,YACP,oBAAoB,KAC/B,YA4LF,CAAA;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,aAAa,4BACG,0BAA0B,WAC3C,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,cAChB,KAAK,CAAC,MAAM,CAAC,aACb,MAAM,YACP;IACN,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,YAAY,CAAC,EAAE,WAAW,CAAA;CAC7B,KACF,YA4BF,CAAA;AAED,0EAA0E;AAC1E,MAAM,MAAM,kBAAkB,GAAG;IAC7B,gFAAgF;IAChF,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAC9B,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,UACxB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAC1B,KAAK,CAAC,kBAAkB,CAkB1B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,UACjB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,2BACA,0BAA0B,YACzC;IACN,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,YAAY,CAAC,EAAE,WAAW,CAAA;CAC7B,KACF,MAAM,CAAC,MAAM,EAAE,YAAY,CA2B7B,CAAA"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { UIConfigType } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Единый источник правды для запроса конфига страницы (`/api/content`).
|
|
4
|
+
*
|
|
5
|
+
* Раньше URL собирался копипастой в каждом руте (PieRoot / PieTelegramRoot /
|
|
6
|
+
* PieMaxRoot). Пока запрос делал только сам рут, это было терпимо. Но хост
|
|
7
|
+
* умеет прогревать этот запрос ДО загрузки бандла (см. {@link PieConfigPrefetch}),
|
|
8
|
+
* а прогрев находят по точному совпадению URL — значит правило сборки обязано
|
|
9
|
+
* быть ровно одно, иначе прогрев молча уходит впустую.
|
|
10
|
+
*/
|
|
11
|
+
/** Идентификатор рута, который уезжает на бэкенд параметром `__pieroot`. */
|
|
12
|
+
export type PieRootKind = 'telegram' | 'max' | 'web';
|
|
13
|
+
export interface ContentUrlParams {
|
|
14
|
+
/** Базовый URL API; завершающий слэш не важен. */
|
|
15
|
+
apiServer: string;
|
|
16
|
+
pathname: string;
|
|
17
|
+
/** Строка запроса БЕЗ ведущего «?» — как отдаёт `URLSearchParams.toString()`. */
|
|
18
|
+
search: string;
|
|
19
|
+
root: PieRootKind;
|
|
20
|
+
/** initData мини-аппа (Telegram / MAX). Для веб-рута не передаётся. */
|
|
21
|
+
initData?: string | null;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Абсолютный URL запроса конфига. Абсолютный, а не относительный, именно чтобы
|
|
25
|
+
* его можно было сравнить с тем, что прогрел хост; axios с абсолютным URL
|
|
26
|
+
* работает так же (baseURL просто игнорируется).
|
|
27
|
+
*/
|
|
28
|
+
export declare function buildContentUrl({ apiServer, pathname, search, root, initData, }: ContentUrlParams): string;
|
|
29
|
+
/**
|
|
30
|
+
* Запрос конфига, который хост запустил заранее — до того, как загрузился и
|
|
31
|
+
* сгидрировался бандл.
|
|
32
|
+
*
|
|
33
|
+
* Зачем. Рут просит конфиг из хука, то есть в самом раннем случае после
|
|
34
|
+
* гидрации. На медленной сети это означает, что загрузка бандла и поход к
|
|
35
|
+
* бэкенду идут строго последовательно (в замерах приложения — около 4.5 с на
|
|
36
|
+
* Slow 4G до первого байта запроса). Хост может выстрелить тем же запросом из
|
|
37
|
+
* инлайнового скрипта в <head>, параллельно загрузке бандла, и отдать сюда
|
|
38
|
+
* промис — тогда рут заберёт готовый ответ вместо нового запроса.
|
|
39
|
+
*
|
|
40
|
+
* URL хост собирает через {@link buildContentUrl}, тем же вызовом, что и рут.
|
|
41
|
+
*
|
|
42
|
+
* Прогрев одноразовый: `used` взводится при первом же использовании, поэтому
|
|
43
|
+
* рефетчи (смена роута, `refetchOnMount`, ретраи react-query) честно идут в
|
|
44
|
+
* сеть и не получают устаревший ответ.
|
|
45
|
+
*/
|
|
46
|
+
export interface PieConfigPrefetch {
|
|
47
|
+
/** Абсолютный URL, по которому хост уже отправил запрос. */
|
|
48
|
+
url: string;
|
|
49
|
+
/** Промис с распарсенным телом ответа. */
|
|
50
|
+
promise: Promise<UIConfigType>;
|
|
51
|
+
/** Служебное поле; выставляет рут. Хосту трогать не нужно. */
|
|
52
|
+
used?: boolean;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Отдаёт прогретый ответ, если он относится к этому же URL и ещё не был
|
|
56
|
+
* использован. Во всех остальных случаях — `null`, и рут идёт в сеть сам.
|
|
57
|
+
*
|
|
58
|
+
* Провалившийся прогрев (сеть моргнула, бэкенд ответил ошибкой) тоже даёт
|
|
59
|
+
* `null`: это не повод ронять страницу, обычный запрос сделает вторую попытку.
|
|
60
|
+
*/
|
|
61
|
+
export declare function consumeConfigPrefetch(prefetch: PieConfigPrefetch | undefined, url: string): Promise<UIConfigType | null>;
|
|
62
|
+
//# sourceMappingURL=contentRequest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contentRequest.d.ts","sourceRoot":"","sources":["../../src/util/contentRequest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAEvC;;;;;;;;GAQG;AAEH,4EAA4E;AAC5E,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,KAAK,GAAG,KAAK,CAAA;AAEpD,MAAM,WAAW,gBAAgB;IAC7B,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,iFAAiF;IACjF,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,WAAW,CAAA;IACjB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAC5B,SAAS,EACT,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,QAAQ,GACX,EAAE,gBAAgB,GAAG,MAAM,CAQ3B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,iBAAiB;IAC9B,4DAA4D;IAC5D,GAAG,EAAE,MAAM,CAAA;IACX,0CAA0C;IAC1C,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;IAC9B,8DAA8D;IAC9D,IAAI,CAAC,EAAE,OAAO,CAAA;CACjB;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACvC,QAAQ,EAAE,iBAAiB,GAAG,SAAS,EACvC,GAAG,EAAE,MAAM,GACZ,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAU9B"}
|