atmx-web 0.128.0 → 0.129.0

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/atmx.es.js CHANGED
@@ -146,7 +146,7 @@ function m(e) {
146
146
  }
147
147
  function h(e) {
148
148
  if (e.wasmUrl) return e.wasmUrl;
149
- let t = `https://atmx.axiomcore.dev/${e.engineVersion || "v0.128.0"}/axiom_runtime.wasm`;
149
+ let t = `https://atmx.axiomcore.dev/${e.engineVersion || "v0.129.0"}/axiom_runtime.wasm`;
150
150
  return e.disableCacheBuster || (t += `?t=${Date.now()}`), t;
151
151
  }
152
152
  async function g(e) {
@@ -817,7 +817,7 @@ var ne = class extends HTMLElement {
817
817
  typeof window < "u" && !customElements.get("ax-engine-status") && customElements.define("ax-engine-status", ne);
818
818
  //#endregion
819
819
  //#region src/index.ts
820
- var Q = "0.128.0", $ = new class {
820
+ var Q = "0.129.0", $ = new class {
821
821
  version = Q;
822
822
  initialized = !1;
823
823
  debug = !1;
package/dist/atmx.umd.js CHANGED
@@ -822,5 +822,5 @@
822
822
 
823
823
  return Object.assign(__wbg_init, { initSync }, exports);
824
824
  })({ __proto__: null });
825
- `,d=null;function f(e){try{localStorage.removeItem(`atmx_auth_store`);let t=[...Array.isArray(e?.endpoints)?e.endpoints:Object.values(e?.endpoints||{}),...Array.isArray(e?.ir?.endpoints)?e.ir.endpoints:Object.values(e?.ir?.endpoints||{})];for(let e of t)for(let t of e?.auth?.methods||[]){let e=t?.name||t?.type;e&&localStorage.removeItem(`axiom_cache_auth_${e}`)}}catch{}}function p(e){return(e.auth?.methods||[]).filter(e=>e?.type?.toLowerCase()!==`session`).map(e=>e?.name||e?.type).filter(Boolean)}function m(e){if(e.length===0)return 0;let t=d.axiom_malloc(e.length);return new Uint8Array(d.memory.buffer).set(e,t),t}function h(e){if(!e)return{ptr:0,len:0};let t=new TextEncoder().encode(e);return{ptr:m(t),len:t.length}}function g(e){if(e.wasmUrl)return e.wasmUrl;let t=`https://atmx.axiomcore.dev/${e.engineVersion||`v0.128.0`}/axiom_runtime.wasm`;return e.disableCacheBuster||(t+=`?t=${Date.now()}`),t}async function _(e){let t=performance.now(),n={ok:!1,contracts:{},initDurationMs:0};try{if(!window.wasm_bindgen){let e=document.createElement(`script`);e.type=`text/javascript`,e.text=`${u}\nwindow.wasm_bindgen = wasm_bindgen;`,document.head.appendChild(e)}let t=window.wasm_bindgen,i=g(e);try{d=await t({module_or_path:fetch(i)})}catch(e){throw{stage:`ffiBoundary`,category:`network`,code:`WasmFetchFailed`,message:`Failed to download WASM engine: ${e.message}`,retryable:!0}}r(d),setInterval(()=>{d&&d.axiom_process_responses()},16);let o=h(``),s=d.axiom_wasm_initialize(o.ptr,o.len);if(d.axiom_free_memory(o.ptr,o.len),s!==0)throw{stage:`runtime`,category:`server`,code:`InitFailed`,message:`Engine init failed (Code: ${s})`,retryable:!1};for(let[t,r]of Object.entries(e.contracts))try{let i=await fetch(r.contractUrl);if(!i.ok)throw Error(`HTTP ${i.status}`);let o=await i.arrayBuffer(),s=0;try{let e=new TextDecoder().decode(o),n=JSON.parse(e),r=n?.ir?.endpoints;r&&(s=Array.isArray(r)?r.length:Object.keys(r).length),f(n),a(t,n)}catch(e){console.error(`ATMX: Failed to parse .axiom contract for '${t}'`,e)}let c=new Uint8Array(o),l=m(c),u=h(t),p=h(r.baseUrl),g=d.axiom_wasm_load_contract(u.ptr,u.len,p.ptr,p.len,l,c.length,0,0,0,0);if(d.axiom_free_memory(l,c.length),d.axiom_free_memory(u.ptr,u.len),d.axiom_free_memory(p.ptr,p.len),g!==0&&g!==-1)throw Error(`Load error (Code: ${g})`);e.debug&&console.log(`%cšŸ”’ Axiom Contract Loaded: ${t} (${s} endpoints)`,`color: #10b981; font-weight: bold;`),n.contracts[t]={loaded:!0,endpointCount:s},document.dispatchEvent(new CustomEvent(`atmx:contract-loaded`,{detail:{namespace:t,endpointCount:s}}))}catch(e){n.contracts[t]={loaded:!1,endpointCount:0,error:e.message},console.error(`ATMX: Contract failed for ${t}`,e)}n.ok=!0}catch(e){n.ok=!1,n.error=e.stage?e:{stage:`runtime`,category:`unknown`,code:`FatalError`,message:e.message||String(e),retryable:!1}}return n.initDurationMs=Math.round(performance.now()-t),n}function v(e,t,n){if(!d)return;let r=h(e),i=h(t),a=h(n);d.axiom_wasm_set_auth_token(r.ptr,r.len,i.ptr,i.len,a.ptr,a.len),d.axiom_free_memory(r.ptr,r.len),d.axiom_free_memory(i.ptr,i.len),d.axiom_free_memory(a.ptr,a.len)}function y(e,t){if(!d)return;let n=new Set(l(e).flatMap(p));for(let r of n)v(e,r,t)}function b(e,t){if(!d)return;let n=h(e),r=h(t);d.axiom_wasm_clear_auth_token(n.ptr,n.len,r.ptr,r.len),d.axiom_free_memory(n.ptr,n.len),d.axiom_free_memory(r.ptr,r.len)}function x(e,t){if(!d)return;let n=new TextEncoder().encode(JSON.stringify(t)),r=m(n);d.axiom_wasm_send_stream_message(e,r,n.length),d.axiom_free_memory(r,n.length)}function S(e){if(!d)return;let t=new Map;for(let e of c()){let n=t.get(e.namespace)||new Set;p(e).forEach(e=>n.add(e)),t.set(e.namespace,n)}for(let[n,r]of t)for(let t of r)v(n,t,e)}function C(e,t,n={}){if(e)try{let r=Object.keys(n),i=Object.values(n);return Function(`$data`,`$error`,`$state`,...r,`return (${e});`)(t.data??null,t.error??null,t,...i)}catch(t){console.error(`ATMX Eval Error: ${e}`,t);return}}function w(e,t,n={}){if(e)try{let r=Object.keys(n),i=Object.values(n);Function(`$data`,`$error`,`$state`,...r,e)(t.data??null,t.error??null,t,...i)}catch(t){console.error(`ATMX Action Error: ${e}`,t)}}function T(e,t){E(e,t,!0,{})}function E(e,t,n,r){if(!(!n&&(e.hasAttribute(`ax-query`)||e.hasAttribute(`ax-mutate`)))&&!(!n&&e.hasAttribute(`data-ax-clone-of`))){if(e.hasAttribute(`ax-for`)){D(e,t,r);return}if(e.hasAttribute(`ax-when`)&&(e.getAttribute(`ax-when`).split(`,`).map(e=>e.trim()).includes(t.state)?(e.removeAttribute(`hidden`),e.style.removeProperty(`display`)):(e.setAttribute(`hidden`,`true`),e.style.setProperty(`display`,`none`,`important`))),e.hasAttribute(`ax-if`)&&(C(e.getAttribute(`ax-if`),t,r)?(e.removeAttribute(`hidden`),e.style.removeProperty(`display`)):(e.setAttribute(`hidden`,``),e.style.setProperty(`display`,`none`,`important`))),e.hasAttribute(`ax-text`)){let n=C(e.getAttribute(`ax-text`),t,r);e.textContent=n==null?``:String(n)}if(e.hasAttribute(`ax-error-for`)){let n=e.getAttribute(`ax-error-for`),r=``;if(t.state===`error`&&t.error?.code===`ValidationError`){let e=(t.error.details||``).split(`
826
- `);for(let t of e)if(t.startsWith(n+`:`)){r=t.substring(n.length+1).trim();break}}let i=e.parentElement?.querySelector(`[name="${n}"]`);r?(e.textContent=r,e.removeAttribute(`hidden`),e.style.removeProperty(`display`),i&&(i.setAttribute(`aria-invalid`,`true`),i.classList.add(`border-red-500`,`focus:border-red-500`,`focus:ring-red-500`))):(e.setAttribute(`hidden`,``),e.style.setProperty(`display`,`none`,`important`),e.textContent=``,i&&(i.removeAttribute(`aria-invalid`),i.classList.remove(`border-red-500`,`focus:border-red-500`,`focus:ring-red-500`)))}Array.from(e.attributes).forEach(n=>{if(n.name.startsWith(`ax-bind:`)){let i=n.name.substring(8),a=C(n.value,t,r);a===!1||a==null?e.removeAttribute(i):e.setAttribute(i,a===!0?i:String(a))}}),Array.from(e.children).forEach(e=>{E(e,t,!1,r)})}}function D(e,t,n){e.style.display=`none`,e.hasAttribute(`data-ax-for-id`)||e.setAttribute(`data-ax-for-id`,Math.random().toString(36).substr(2,9));let r=e.getAttribute(`data-ax-for-id`),i=e.getAttribute(`ax-for`).match(/^\s*(?:(?:\(\s*([\w\$]+)\s*,\s*([\w\$]+)\s*\))|([\w\$]+))\s+in\s+(.+)$/);if(!i)return;let a=i[1]||i[3],o=i[2],s=i[4],c=C(s,t,n),l=e.parentElement;if(!l)return;let u=Array.from(l.querySelectorAll(`[data-ax-clone-of="${r}"]`));if(!c||!Array.isArray(c)){u.forEach(e=>e.remove());return}let d=e.getAttribute(`ax-key`),f=[];c.forEach((i,s)=>{let c={...n,[a]:i};o&&(c[o]=s);let p=String(s);d&&(p=String(C(d,t,c)));let m=u.find(e=>e.getAttribute(`data-ax-key`)===p);m||(m=e.cloneNode(!0),m.removeAttribute(`ax-for`),m.style.removeProperty(`display`),m.style.length===0&&m.removeAttribute(`style`),m.setAttribute(`data-ax-clone-of`,r),m.setAttribute(`data-ax-key`,p)),l.insertBefore(m,e),E(m,t,!0,c),f.push(m)}),u.forEach(e=>{f.includes(e)||e.remove()})}var O=new WeakMap;function k(e){return O.has(e)||O.set(e,{state:`idle`,isFetching:!1,isMutating:!1,source:null,data:null,error:null}),O.get(e)}function ee(e){let t=e.parentElement;for(;t;){if(t.hasAttribute(`ax-query`)||t.hasAttribute(`ax-mutate`)){let e=O.get(t);if(e&&e.data)return e.data}t=t.parentElement}return{}}function A(e,t){let n=k(e);Object.assign(n,t),t.state===`loading`&&(n.isFetching=!0),t.state===`mutating`&&(n.isMutating=!0),(t.state===`success`||t.state===`data`&&t.isFetching===!1)&&(n.isFetching=!1,n.isMutating=!1),O.set(e,n),T(e,n)}var j=0,M=class{key;route;args;state;listeners=new Set;currentReqId=null;constructor(e,t,n){this.key=e,this.route=t,this.args=n;let r=null;try{let t=sessionStorage.getItem(`atmx_cache_${e}`);t&&(r=JSON.parse(t))}catch{}r?this.state={state:`data`,isFetching:!1,source:`cache`,data:r,error:null}:this.state={state:`idle`,isFetching:!1,source:null,data:null,error:null}}subscribe(e){return this.listeners.add(e),e(this.state),()=>this.listeners.delete(e)}update(e){if(this.state={...this.state,...e},this.state.data)try{sessionStorage.setItem(`atmx_cache_${this.key}`,JSON.stringify(this.state.data))}catch{}this.listeners.forEach(e=>e(this.state))}fetch(e=!1){if(this.state.isFetching&&!e)return;this.update({state:this.state.data?`data`:`loading`,isFetching:!0,error:null});let r=++j;this.currentReqId=r;let{path:i,remainingArgs:a}=s(this.route,this.args),o=new Uint8Array;Object.keys(a).length>0&&(o=new TextEncoder().encode(JSON.stringify(a))),$.debug&&(console.groupCollapsed(`%cāž” WASM QUERY [#${r}]`,`color: #7c3aed; font-weight: bold;`),console.log(`Namespace:`,this.route.namespace),console.log(`Endpoint ID:`,this.route.id),console.log(`Path:`,i),console.groupEnd()),n.set(r,{isStream:this.route.isStream,onResponse:e=>{if(this.currentReqId===r){if(e.eventType===t.Error){this.update({state:`error`,error:e.error,isFetching:!1});return}if(e.data!==void 0){let n=`network`,r=!1;e.eventType===t.CacheHit?(n=`cache`,r=!1):e.eventType===t.CacheHitAndFetching?(n=`cache`,r=!0):e.eventType===t.NetworkSuccess&&(n=`network`,r=!1),this.update({state:`data`,data:e.data,source:n,isFetching:r})}}},onComplete:()=>{this.currentReqId===r&&this.update({isFetching:!1})}});let c=h(this.route.namespace),l=h(this.route.method),u=h(i),f=m(o),p=h(``),g=h(``);d.axiom_wasm_call(r,c.ptr,c.len,this.route.id,l.ptr,l.len,u.ptr,u.len,p.ptr,p.len,g.ptr,g.len,f,o.length),d.axiom_free_memory(c.ptr,c.len),d.axiom_free_memory(l.ptr,l.len),d.axiom_free_memory(u.ptr,u.len),d.axiom_free_memory(p.ptr,p.len),d.axiom_free_memory(g.ptr,g.len)}},N=new Map;function P(e,t={}){return`${e}:${JSON.stringify(t)}`}function F(e,t={}){let n=P(e,t),r=N.get(n);if(r?.state.data!==null&&r?.state.data!==void 0)return r.state.data;try{let e=sessionStorage.getItem(`atmx_cache_${n}`);return e?JSON.parse(e):null}catch{return null}}function I(e,t={}){let n=o(e);if(!n)throw Error(`ATMX Route not found: ${e}`);let r=P(e,t),i=N.get(r);i||(i=new M(r,n,t),N.set(r,i));let a=!1,s=new Set,c=i.subscribe(e=>{a||s.forEach(t=>t(e))});return i.fetch(),{getSnapshot:()=>({...i.state}),subscribe(e){return a?()=>{}:(s.add(e),e(i.state),()=>s.delete(e))},refresh(){a||i.fetch(!0)},dispose(){a||(a=!0,s.clear(),c())}}}function L(e,r={},i={},a={}){return new Promise((c,l)=>{let u=o(e);if(!u)return l(Error(`ATMX Route not found: ${e}`));let f=++j,{path:p,remainingArgs:g}=s(u,{...r,...i}),_=a.rawBody;if(!_){let e=g;u.bodyParam&&g[u.bodyParam]!==void 0&&typeof g[u.bodyParam]==`object`&&(e=g[u.bodyParam]),_=new Uint8Array,Object.keys(e).length>0&&(_=new TextEncoder().encode(JSON.stringify(e)))}let v=!1,y=e=>{v||(v=!0,c(e))},b=e=>{v||(v=!0,l(e))};n.set(f,{isStream:u.isStream,onResponse:e=>{e.eventType===t.Error?(document.dispatchEvent(new CustomEvent(`atmx:error`,{detail:e.error})),b(e.error)):e.data!==void 0&&y(e.data)},onComplete:()=>y(void 0)});let x=h(u.namespace),S=h(u.method),C=h(p),w=h(``),T=h(Object.keys(a.headers||{}).length>0?JSON.stringify(a.headers):``),E=m(_);d.axiom_wasm_call(f,x.ptr,x.len,u.id,S.ptr,S.len,C.ptr,C.len,w.ptr,w.len,T.ptr,T.len,E,_.length),d.axiom_free_memory(x.ptr,x.len),d.axiom_free_memory(S.ptr,S.len),d.axiom_free_memory(C.ptr,C.len),d.axiom_free_memory(w.ptr,w.len),d.axiom_free_memory(T.ptr,T.len),E&&d.axiom_free_memory(E,_.length)})}function R(e,t){let[n,r]=e.split(`.`),i=`atmx_cache_${e}`;t&&Object.keys(t).length>0&&(i+=`:${JSON.stringify(t)}`),Object.keys(sessionStorage).forEach(e=>{(e===i||!t&&e.startsWith(i+`:`))&&sessionStorage.removeItem(e)}),N.forEach((e,i)=>{e.route.namespace===n&&e.route.name===r&&(!t||Object.keys(t).length===0||JSON.stringify(e.args)===JSON.stringify(t))&&e.fetch(!0)})}function z(e,t={},n){let r=P(e,t);try{sessionStorage.setItem(`atmx_cache_${r}`,JSON.stringify(n))}catch{}let i=N.get(r);i&&i.update({state:`data`,source:`cache`,isFetching:!1,data:n,error:null})}function B(e,t=!0){let n=e?`atmx_cache_${e}.`:`atmx_cache_`;Object.keys(sessionStorage).forEach(e=>{e.startsWith(n)&&sessionStorage.removeItem(e)}),N.forEach(n=>{(!e||n.route.namespace===e)&&(n.update({state:`idle`,source:null,data:null,error:null,isFetching:!1}),t&&n.fetch(!0))})}var V=0;function H(e,t){let n=`ax-on:${t}`;e.hasAttribute(n)&&w(e.getAttribute(n),k(e))}function U(e,t,n){if(!$.debug)return;let r=e===`OUT`?`#7c3aed`:`#059669`;console.groupCollapsed(`%c${e===`OUT`?`āž” WASM CALL`:`← WASM RESP`} [#${t}]`,`color: ${r}; font-weight: bold;`),console.log(`Details:`,n),console.groupEnd()}function W(e,t){let n=t.trim().match(/^([\w\.\-]+)(?:\((.*)\))?$/);if(!n)return null;let r=n[1],i={};if(n[2]&&n[2].trim()!==``)try{if(e){let t=k(e),r=t.data||ee(e);i=Function(`$data`,`$state`,`return (${n[2]});`)(r??null,t)||{}}else i=Function(`return (${n[2]});`)()||{}}catch(e){console.error(`ATMX Scope Error in "${t}":`,e)}return{target:r,args:i}}function G(e){let t=e.getAttribute(`ax-query`);if(!t)return;let n=W(e,t);if(!n)return;let r=o(n.target);if(!r){A(e,{state:`error`,error:{message:`Route not found: ${n.target}`}});return}let i=`${n.target}:${JSON.stringify(n.args)}`,a=N.get(i);a||(a=new M(i,r,n.args),N.set(i,a)),e._axListener||(e._axListener=t=>{A(e,t),(t.state===`data`||t.state===`error`)&&(H(e,t.state),e.dispatchEvent(new CustomEvent(`atmx:${t.state}`,{bubbles:!0,detail:t.data||t.error})))},a.subscribe(e._axListener)),a.fetch()}function K(e){let t=e.getAttribute(`ax-mutate`);if(!t)return;let n=W(e,t);if(!n)return;let r=o(n.target);if(!r){console.error(`ATMX: Mutation route not found for target '${n.target}'. Check your ax-mutate attribute.`),A(e,{state:`error`,error:{message:`Route not found: ${n.target}`}}),H(e,`error`);return}A(e,{state:`mutating`,error:null,data:null}),H(e,`mutating`);let i={};e instanceof HTMLFormElement&&new FormData(e).forEach((t,n)=>{let r=e.elements.namedItem(n),a=!1;r instanceof HTMLInputElement?a=r.type===`number`:r instanceof RadioNodeList&&r.length>0&&(a=r[0].type===`number`);let o=a&&t!==``?Number(t):t;if(n.includes(`.`)){let e=n.split(`.`),t=i;for(let n=0;n<e.length-1;n++)t[e[n]]||(t[e[n]]={}),t=t[e[n]];t[e[e.length-1]]=o}else i[n]=o});let{path:a,remainingArgs:c}=s(r,{...i,...n.args}),l=c;r.bodyParam&&c[r.bodyParam]!==void 0&&typeof c[r.bodyParam]==`object`&&(l=c[r.bodyParam]);let u={},d=e.getAttribute(`ax-headers`);if(d)try{u=Function(`return (`+d+`);`)()||{}}catch(e){console.error(`ATMX: Invalid ax-headers syntax`,e)}let f=Object.entries(u).some(([e,t])=>e.toLowerCase()===`content-type`&&t.includes(`application/x-www-form-urlencoded`)),p=new Uint8Array;if(Object.keys(l).length>0)if(f){let e=new URLSearchParams;for(let[t,n]of Object.entries(l))e.append(t,String(n));p=new TextEncoder().encode(e.toString())}else p=new TextEncoder().encode(JSON.stringify(l));q(e,r.namespace,r.id,r.method,a,p,r.isStream,!0,u,f)}function q(e,t,r,i,a,o,s,c,l={},u=!1){let f=++V;U(`OUT`,f,{namespace:t,endpointId:r,method:i,path:a,headers:l,payload:o.length>0?u?new TextDecoder().decode(o):JSON.parse(new TextDecoder().decode(o)):null}),n.set(f,{isStream:s,onResponse:t=>J(e,t,c,f),onComplete:()=>{$.debug&&console.log(`%cāœ” Stream Complete [#${f}]`,`color: #94a3b8;`)}});let p=h(t),g=h(i),_=h(a),v=h(``),y=h(Object.keys(l).length>0?JSON.stringify(l):``),b=m(o);d.axiom_wasm_call(f,p.ptr,p.len,r,g.ptr,g.len,_.ptr,_.len,v.ptr,v.len,y.ptr,y.len,b,o.length),d.axiom_free_memory(p.ptr,p.len),d.axiom_free_memory(g.ptr,g.len),d.axiom_free_memory(_.ptr,_.len),d.axiom_free_memory(v.ptr,v.len),d.axiom_free_memory(y.ptr,y.len),b&&d.axiom_free_memory(b,o.length)}function J(e,n,r,i){if(U(`IN`,i,{eventType:t[n.eventType],data:n.data,error:n.error}),n.eventType===t.Error){A(e,{state:`error`,error:n.error,isFetching:!1,isMutating:!1}),H(e,`error`),e.dispatchEvent(new CustomEvent(`atmx:error`,{bubbles:!0,detail:n.error}));return}if(n.data!==void 0){let i=`network`,a=!1;n.eventType===t.CacheHit?i=`cache`:n.eventType===t.CacheHitAndFetching?(i=`cache`,a=!0):n.eventType===t.NetworkSuccess&&(i=`network`);let s=r?`success`:`data`;if(A(e,{state:s,data:n.data,source:i,isFetching:a,isMutating:!1}),r){let t=e.getAttribute(`ax-invalidates`);t&&t.split(`,`).map(e=>e.trim()).forEach(t=>{let n=C(`\`${t}\``,k(e))||t;$.invalidate(n)});let n=e.getAttribute(`ax-store-token`);if(n){let t=C(n,k(e));if(t){let n=o(W(e,e.getAttribute(`ax-mutate`)).target)?.namespace||`default`,r=e.getAttribute(`ax-token-target`);(r?r.split(`,`).map(e=>e.trim()):[n]).forEach(e=>{$.setNamespaceAuthToken(e,t)})}}}H(e,s),e.dispatchEvent(new CustomEvent(r?`atmx:success`:`atmx:data`,{bubbles:!0,detail:n.data}))}}var Y=new IntersectionObserver(e=>{e.forEach(e=>{if(e.isIntersecting){let t=e.target;t.hasAttribute(`ax-query`)&&G(t),Y.unobserve(t)}})});function X(e){e.querySelectorAll(`[\\:ax-query], [\\:ax-mutate]`).forEach(e=>{if(e.hasAttribute(`:ax-query`)){let t=C(e.getAttribute(`:ax-query`),k(e));t&&e.setAttribute(`ax-query`,String(t)),e.removeAttribute(`:ax-query`)}if(e.hasAttribute(`:ax-mutate`)){let t=C(e.getAttribute(`:ax-mutate`),k(e));t&&e.setAttribute(`ax-mutate`,String(t)),e.removeAttribute(`:ax-mutate`)}})}function te(e=document){X(e),e.querySelectorAll(`[ax-query]`).forEach(e=>{let t=e,n=t.getAttribute(`ax-query`);if(!n)return;let r=W(t,n);if(r){let e=`${r.target}:${JSON.stringify(r.args)}`;try{let n=sessionStorage.getItem(`atmx_cache_${e}`);n&&A(t,{state:`data`,data:JSON.parse(n),source:`cache`,isFetching:!0})}catch{}}})}function Z(e=document){X(e),e.querySelectorAll(`[ax-query]`).forEach(e=>{let t=e;A(t,{});let n=t.getAttribute(`ax-trigger`)||`load`;n===`load`?G(t):n===`intersect`?Y.observe(t):t.addEventListener(n,e=>{e.preventDefault(),G(t)})}),e.querySelectorAll(`[ax-mutate]`).forEach(e=>{let t=e;A(t,{});let n=t.tagName===`FORM`?`submit`:`click`;t.addEventListener(n,e=>{(t.tagName===`A`||t.tagName===`BUTTON`||t.tagName===`FORM`)&&e.preventDefault(),K(t)})}),e.querySelectorAll(`[ax-trigger="refresh"]`).forEach(e=>{let t=e;t.addEventListener(`click`,e=>{e.preventDefault();let n=t.closest(`[ax-query]`);if(n){let e=W(n,n.getAttribute(`ax-query`));if(e&&o(e.target)){let t=`${e.target}:${JSON.stringify(e.args)}`,r=N.get(t);r?r.fetch(!0):G(n)}}})})}function ne(){new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{e instanceof HTMLElement&&Z(e)})})}).observe(document.body,{childList:!0,subtree:!0})}var re=class extends HTMLElement{constructor(){super()}connectedCallback(){let e=this.getAttribute(`loading-text`)||`Initializing...`,t=this.getAttribute(`ready-text`)||`Online`,n=this.getAttribute(`error-text`)||`Failed to Connect`;this.renderState(`loading`,e,`text-amber-500 animate-pulse`),document.addEventListener(`atmx:ready`,()=>{this.renderState(`ready`,t,`text-green-600`)}),document.addEventListener(`atmx:error`,e=>{let t=e;t.detail&&t.detail.stage===`runtime`&&this.renderState(`error`,`${n}: ${t.detail.message}`,`text-red-600`)})}renderState(e,t,n){this.setAttribute(`data-state`,e);let r=this.querySelectorAll(`[data-ax-when]`);r.length>0?r.forEach(t=>{t.getAttribute(`data-ax-when`)===e?t.removeAttribute(`hidden`):t.setAttribute(`hidden`,``)}):(this.innerText=t,this.getAttribute(`class`)||(this.className=`text-xs font-bold ${n}`))}};typeof window<`u`&&!customElements.get(`ax-engine-status`)&&customElements.define(`ax-engine-status`,re);var Q=`0.128.0`,$=new class{version=Q;initialized=!1;debug=!1;async init(e){if(this.initialized)return{ok:!0,contracts:{},initDurationMs:0};let t=await _(e);return t.ok?(this.debug=e.debug||!1,ne(),Z(document.body),this.initialized=!0,this.debug&&console.log(`%cšŸš€ ATMX Debug Mode: Enabled`,`color: #2563eb; font-weight: bold;`),console.log(`āœ… ATMX v${this.version} Online (${t.initDurationMs}ms). Reactive Engine Started.`),document.dispatchEvent(new CustomEvent(`atmx:ready`,{detail:t}))):(console.error(`āŒ ATMX Initialization Failed:`,t.error),document.dispatchEvent(new CustomEvent(`atmx:error`,{detail:t.error}))),t}hydrate(e){let t=document;e&&(t=typeof e==`string`?document.querySelector(e):e),t&&te(t)}triggerQuery(e){let t=typeof e==`string`?document.querySelector(e):e;t&&t instanceof HTMLElement&&t.hasAttribute(`ax-query`)&&G(t)}on(e,t){document.addEventListener(`atmx:${e}`,t)}setAuthToken(e,t,n){v(e,t,n)}setNamespaceAuthToken(e,t){y(e,t)}setGlobalAuthToken(e){S(e)}sendStreamMessage(e,t){x(e,t)}clearAuthToken(e,t){b(e,t)}connect(e){let t=W(null,e);if(!t)return;let n=o(t.target);if(!n)return;let r=`${n.namespace}:${n.id}:${JSON.stringify(t.args)}`,i=N.get(r);i||(i=new M(r,n,t.args),N.set(r,i)),i.fetch()}disconnect(e){let t=W(null,e);if(!t)return;let r=o(t.target);if(!r)return;let i=`${r.namespace}:${r.id}:${JSON.stringify(t.args)}`,a=N.get(i);a&&(a.currentReqId&&n.delete(a.currentReqId),N.delete(i),this.debug&&console.log(`šŸ”Œ ATMX Disconnected Stream: ${e}`))}send(e,t){let n=W(null,e);if(!n)return;let r=o(n.target);if(!r)return;let i=`${r.namespace}:${r.id}:${JSON.stringify(n.args)}`,a=N.get(i);a&&a.currentReqId?x(a.currentReqId,t):console.warn(`ATMX: Cannot send message, stream not active for ${e}`)}mutate(e,t,n){return L(e,t,n)}query(e,t={}){return I(e,t)}getCachedQueryData(e,t={}){return F(e,t)}mutateBytes(e,t,n,r={}){return L(e,t,{},{rawBody:n,headers:r})}invalidate(e,t){R(e,t)}setQueryData(e,t,n){z(e,t,n)}clearCache(e){B(e)}purgeCache(e){B(e,!1)}onError(e){document.addEventListener(`atmx:error`,t=>{e(t.detail)})}};typeof window<`u`&&(window.atmx=$),e.ATMX_VERSION=Q,e.allocBytes=m,e.allocString=h,e.atmx=$,e.buildRequestPath=s,e.clearAuthToken=b,e.initWasm=_,e.pendingRequests=n,e.resolveRoute=o,e.sendStreamMessage=x,e.setAuthToken=v,e.setGlobalAuthToken=S,Object.defineProperty(e,`wasmEngine`,{enumerable:!0,get:function(){return d}})});
825
+ `,d=null;function f(e){try{localStorage.removeItem(`atmx_auth_store`);let t=[...Array.isArray(e?.endpoints)?e.endpoints:Object.values(e?.endpoints||{}),...Array.isArray(e?.ir?.endpoints)?e.ir.endpoints:Object.values(e?.ir?.endpoints||{})];for(let e of t)for(let t of e?.auth?.methods||[]){let e=t?.name||t?.type;e&&localStorage.removeItem(`axiom_cache_auth_${e}`)}}catch{}}function p(e){return(e.auth?.methods||[]).filter(e=>e?.type?.toLowerCase()!==`session`).map(e=>e?.name||e?.type).filter(Boolean)}function m(e){if(e.length===0)return 0;let t=d.axiom_malloc(e.length);return new Uint8Array(d.memory.buffer).set(e,t),t}function h(e){if(!e)return{ptr:0,len:0};let t=new TextEncoder().encode(e);return{ptr:m(t),len:t.length}}function g(e){if(e.wasmUrl)return e.wasmUrl;let t=`https://atmx.axiomcore.dev/${e.engineVersion||`v0.129.0`}/axiom_runtime.wasm`;return e.disableCacheBuster||(t+=`?t=${Date.now()}`),t}async function _(e){let t=performance.now(),n={ok:!1,contracts:{},initDurationMs:0};try{if(!window.wasm_bindgen){let e=document.createElement(`script`);e.type=`text/javascript`,e.text=`${u}\nwindow.wasm_bindgen = wasm_bindgen;`,document.head.appendChild(e)}let t=window.wasm_bindgen,i=g(e);try{d=await t({module_or_path:fetch(i)})}catch(e){throw{stage:`ffiBoundary`,category:`network`,code:`WasmFetchFailed`,message:`Failed to download WASM engine: ${e.message}`,retryable:!0}}r(d),setInterval(()=>{d&&d.axiom_process_responses()},16);let o=h(``),s=d.axiom_wasm_initialize(o.ptr,o.len);if(d.axiom_free_memory(o.ptr,o.len),s!==0)throw{stage:`runtime`,category:`server`,code:`InitFailed`,message:`Engine init failed (Code: ${s})`,retryable:!1};for(let[t,r]of Object.entries(e.contracts))try{let i=await fetch(r.contractUrl);if(!i.ok)throw Error(`HTTP ${i.status}`);let o=await i.arrayBuffer(),s=0;try{let e=new TextDecoder().decode(o),n=JSON.parse(e),r=n?.ir?.endpoints;r&&(s=Array.isArray(r)?r.length:Object.keys(r).length),f(n),a(t,n)}catch(e){console.error(`ATMX: Failed to parse .axiom contract for '${t}'`,e)}let c=new Uint8Array(o),l=m(c),u=h(t),p=h(r.baseUrl),g=d.axiom_wasm_load_contract(u.ptr,u.len,p.ptr,p.len,l,c.length,0,0,0,0);if(d.axiom_free_memory(l,c.length),d.axiom_free_memory(u.ptr,u.len),d.axiom_free_memory(p.ptr,p.len),g!==0&&g!==-1)throw Error(`Load error (Code: ${g})`);e.debug&&console.log(`%cšŸ”’ Axiom Contract Loaded: ${t} (${s} endpoints)`,`color: #10b981; font-weight: bold;`),n.contracts[t]={loaded:!0,endpointCount:s},document.dispatchEvent(new CustomEvent(`atmx:contract-loaded`,{detail:{namespace:t,endpointCount:s}}))}catch(e){n.contracts[t]={loaded:!1,endpointCount:0,error:e.message},console.error(`ATMX: Contract failed for ${t}`,e)}n.ok=!0}catch(e){n.ok=!1,n.error=e.stage?e:{stage:`runtime`,category:`unknown`,code:`FatalError`,message:e.message||String(e),retryable:!1}}return n.initDurationMs=Math.round(performance.now()-t),n}function v(e,t,n){if(!d)return;let r=h(e),i=h(t),a=h(n);d.axiom_wasm_set_auth_token(r.ptr,r.len,i.ptr,i.len,a.ptr,a.len),d.axiom_free_memory(r.ptr,r.len),d.axiom_free_memory(i.ptr,i.len),d.axiom_free_memory(a.ptr,a.len)}function y(e,t){if(!d)return;let n=new Set(l(e).flatMap(p));for(let r of n)v(e,r,t)}function b(e,t){if(!d)return;let n=h(e),r=h(t);d.axiom_wasm_clear_auth_token(n.ptr,n.len,r.ptr,r.len),d.axiom_free_memory(n.ptr,n.len),d.axiom_free_memory(r.ptr,r.len)}function x(e,t){if(!d)return;let n=new TextEncoder().encode(JSON.stringify(t)),r=m(n);d.axiom_wasm_send_stream_message(e,r,n.length),d.axiom_free_memory(r,n.length)}function S(e){if(!d)return;let t=new Map;for(let e of c()){let n=t.get(e.namespace)||new Set;p(e).forEach(e=>n.add(e)),t.set(e.namespace,n)}for(let[n,r]of t)for(let t of r)v(n,t,e)}function C(e,t,n={}){if(e)try{let r=Object.keys(n),i=Object.values(n);return Function(`$data`,`$error`,`$state`,...r,`return (${e});`)(t.data??null,t.error??null,t,...i)}catch(t){console.error(`ATMX Eval Error: ${e}`,t);return}}function w(e,t,n={}){if(e)try{let r=Object.keys(n),i=Object.values(n);Function(`$data`,`$error`,`$state`,...r,e)(t.data??null,t.error??null,t,...i)}catch(t){console.error(`ATMX Action Error: ${e}`,t)}}function T(e,t){E(e,t,!0,{})}function E(e,t,n,r){if(!(!n&&(e.hasAttribute(`ax-query`)||e.hasAttribute(`ax-mutate`)))&&!(!n&&e.hasAttribute(`data-ax-clone-of`))){if(e.hasAttribute(`ax-for`)){D(e,t,r);return}if(e.hasAttribute(`ax-when`)&&(e.getAttribute(`ax-when`).split(`,`).map(e=>e.trim()).includes(t.state)?(e.removeAttribute(`hidden`),e.style.removeProperty(`display`)):(e.setAttribute(`hidden`,`true`),e.style.setProperty(`display`,`none`,`important`))),e.hasAttribute(`ax-if`)&&(C(e.getAttribute(`ax-if`),t,r)?(e.removeAttribute(`hidden`),e.style.removeProperty(`display`)):(e.setAttribute(`hidden`,``),e.style.setProperty(`display`,`none`,`important`))),e.hasAttribute(`ax-text`)){let n=C(e.getAttribute(`ax-text`),t,r);e.textContent=n==null?``:String(n)}if(e.hasAttribute(`ax-error-for`)){let n=e.getAttribute(`ax-error-for`),r=``;if(t.state===`error`&&t.error?.code===`ValidationError`){let e=(t.error.details||``).split(`
826
+ `);for(let t of e)if(t.startsWith(n+`:`)){r=t.substring(n.length+1).trim();break}}let i=e.parentElement?.querySelector(`[name="${n}"]`);r?(e.textContent=r,e.removeAttribute(`hidden`),e.style.removeProperty(`display`),i&&(i.setAttribute(`aria-invalid`,`true`),i.classList.add(`border-red-500`,`focus:border-red-500`,`focus:ring-red-500`))):(e.setAttribute(`hidden`,``),e.style.setProperty(`display`,`none`,`important`),e.textContent=``,i&&(i.removeAttribute(`aria-invalid`),i.classList.remove(`border-red-500`,`focus:border-red-500`,`focus:ring-red-500`)))}Array.from(e.attributes).forEach(n=>{if(n.name.startsWith(`ax-bind:`)){let i=n.name.substring(8),a=C(n.value,t,r);a===!1||a==null?e.removeAttribute(i):e.setAttribute(i,a===!0?i:String(a))}}),Array.from(e.children).forEach(e=>{E(e,t,!1,r)})}}function D(e,t,n){e.style.display=`none`,e.hasAttribute(`data-ax-for-id`)||e.setAttribute(`data-ax-for-id`,Math.random().toString(36).substr(2,9));let r=e.getAttribute(`data-ax-for-id`),i=e.getAttribute(`ax-for`).match(/^\s*(?:(?:\(\s*([\w\$]+)\s*,\s*([\w\$]+)\s*\))|([\w\$]+))\s+in\s+(.+)$/);if(!i)return;let a=i[1]||i[3],o=i[2],s=i[4],c=C(s,t,n),l=e.parentElement;if(!l)return;let u=Array.from(l.querySelectorAll(`[data-ax-clone-of="${r}"]`));if(!c||!Array.isArray(c)){u.forEach(e=>e.remove());return}let d=e.getAttribute(`ax-key`),f=[];c.forEach((i,s)=>{let c={...n,[a]:i};o&&(c[o]=s);let p=String(s);d&&(p=String(C(d,t,c)));let m=u.find(e=>e.getAttribute(`data-ax-key`)===p);m||(m=e.cloneNode(!0),m.removeAttribute(`ax-for`),m.style.removeProperty(`display`),m.style.length===0&&m.removeAttribute(`style`),m.setAttribute(`data-ax-clone-of`,r),m.setAttribute(`data-ax-key`,p)),l.insertBefore(m,e),E(m,t,!0,c),f.push(m)}),u.forEach(e=>{f.includes(e)||e.remove()})}var O=new WeakMap;function k(e){return O.has(e)||O.set(e,{state:`idle`,isFetching:!1,isMutating:!1,source:null,data:null,error:null}),O.get(e)}function ee(e){let t=e.parentElement;for(;t;){if(t.hasAttribute(`ax-query`)||t.hasAttribute(`ax-mutate`)){let e=O.get(t);if(e&&e.data)return e.data}t=t.parentElement}return{}}function A(e,t){let n=k(e);Object.assign(n,t),t.state===`loading`&&(n.isFetching=!0),t.state===`mutating`&&(n.isMutating=!0),(t.state===`success`||t.state===`data`&&t.isFetching===!1)&&(n.isFetching=!1,n.isMutating=!1),O.set(e,n),T(e,n)}var j=0,M=class{key;route;args;state;listeners=new Set;currentReqId=null;constructor(e,t,n){this.key=e,this.route=t,this.args=n;let r=null;try{let t=sessionStorage.getItem(`atmx_cache_${e}`);t&&(r=JSON.parse(t))}catch{}r?this.state={state:`data`,isFetching:!1,source:`cache`,data:r,error:null}:this.state={state:`idle`,isFetching:!1,source:null,data:null,error:null}}subscribe(e){return this.listeners.add(e),e(this.state),()=>this.listeners.delete(e)}update(e){if(this.state={...this.state,...e},this.state.data)try{sessionStorage.setItem(`atmx_cache_${this.key}`,JSON.stringify(this.state.data))}catch{}this.listeners.forEach(e=>e(this.state))}fetch(e=!1){if(this.state.isFetching&&!e)return;this.update({state:this.state.data?`data`:`loading`,isFetching:!0,error:null});let r=++j;this.currentReqId=r;let{path:i,remainingArgs:a}=s(this.route,this.args),o=new Uint8Array;Object.keys(a).length>0&&(o=new TextEncoder().encode(JSON.stringify(a))),$.debug&&(console.groupCollapsed(`%cāž” WASM QUERY [#${r}]`,`color: #7c3aed; font-weight: bold;`),console.log(`Namespace:`,this.route.namespace),console.log(`Endpoint ID:`,this.route.id),console.log(`Path:`,i),console.groupEnd()),n.set(r,{isStream:this.route.isStream,onResponse:e=>{if(this.currentReqId===r){if(e.eventType===t.Error){this.update({state:`error`,error:e.error,isFetching:!1});return}if(e.data!==void 0){let n=`network`,r=!1;e.eventType===t.CacheHit?(n=`cache`,r=!1):e.eventType===t.CacheHitAndFetching?(n=`cache`,r=!0):e.eventType===t.NetworkSuccess&&(n=`network`,r=!1),this.update({state:`data`,data:e.data,source:n,isFetching:r})}}},onComplete:()=>{this.currentReqId===r&&this.update({isFetching:!1})}});let c=h(this.route.namespace),l=h(this.route.method),u=h(i),f=m(o),p=h(``),g=h(``);d.axiom_wasm_call(r,c.ptr,c.len,this.route.id,l.ptr,l.len,u.ptr,u.len,p.ptr,p.len,g.ptr,g.len,f,o.length),d.axiom_free_memory(c.ptr,c.len),d.axiom_free_memory(l.ptr,l.len),d.axiom_free_memory(u.ptr,u.len),d.axiom_free_memory(p.ptr,p.len),d.axiom_free_memory(g.ptr,g.len)}},N=new Map;function P(e,t={}){return`${e}:${JSON.stringify(t)}`}function F(e,t={}){let n=P(e,t),r=N.get(n);if(r?.state.data!==null&&r?.state.data!==void 0)return r.state.data;try{let e=sessionStorage.getItem(`atmx_cache_${n}`);return e?JSON.parse(e):null}catch{return null}}function I(e,t={}){let n=o(e);if(!n)throw Error(`ATMX Route not found: ${e}`);let r=P(e,t),i=N.get(r);i||(i=new M(r,n,t),N.set(r,i));let a=!1,s=new Set,c=i.subscribe(e=>{a||s.forEach(t=>t(e))});return i.fetch(),{getSnapshot:()=>({...i.state}),subscribe(e){return a?()=>{}:(s.add(e),e(i.state),()=>s.delete(e))},refresh(){a||i.fetch(!0)},dispose(){a||(a=!0,s.clear(),c())}}}function L(e,r={},i={},a={}){return new Promise((c,l)=>{let u=o(e);if(!u)return l(Error(`ATMX Route not found: ${e}`));let f=++j,{path:p,remainingArgs:g}=s(u,{...r,...i}),_=a.rawBody;if(!_){let e=g;u.bodyParam&&g[u.bodyParam]!==void 0&&typeof g[u.bodyParam]==`object`&&(e=g[u.bodyParam]),_=new Uint8Array,Object.keys(e).length>0&&(_=new TextEncoder().encode(JSON.stringify(e)))}let v=!1,y=e=>{v||(v=!0,c(e))},b=e=>{v||(v=!0,l(e))};n.set(f,{isStream:u.isStream,onResponse:e=>{e.eventType===t.Error?(document.dispatchEvent(new CustomEvent(`atmx:error`,{detail:e.error})),b(e.error)):e.data!==void 0&&y(e.data)},onComplete:()=>y(void 0)});let x=h(u.namespace),S=h(u.method),C=h(p),w=h(``),T=h(Object.keys(a.headers||{}).length>0?JSON.stringify(a.headers):``),E=m(_);d.axiom_wasm_call(f,x.ptr,x.len,u.id,S.ptr,S.len,C.ptr,C.len,w.ptr,w.len,T.ptr,T.len,E,_.length),d.axiom_free_memory(x.ptr,x.len),d.axiom_free_memory(S.ptr,S.len),d.axiom_free_memory(C.ptr,C.len),d.axiom_free_memory(w.ptr,w.len),d.axiom_free_memory(T.ptr,T.len),E&&d.axiom_free_memory(E,_.length)})}function R(e,t){let[n,r]=e.split(`.`),i=`atmx_cache_${e}`;t&&Object.keys(t).length>0&&(i+=`:${JSON.stringify(t)}`),Object.keys(sessionStorage).forEach(e=>{(e===i||!t&&e.startsWith(i+`:`))&&sessionStorage.removeItem(e)}),N.forEach((e,i)=>{e.route.namespace===n&&e.route.name===r&&(!t||Object.keys(t).length===0||JSON.stringify(e.args)===JSON.stringify(t))&&e.fetch(!0)})}function z(e,t={},n){let r=P(e,t);try{sessionStorage.setItem(`atmx_cache_${r}`,JSON.stringify(n))}catch{}let i=N.get(r);i&&i.update({state:`data`,source:`cache`,isFetching:!1,data:n,error:null})}function B(e,t=!0){let n=e?`atmx_cache_${e}.`:`atmx_cache_`;Object.keys(sessionStorage).forEach(e=>{e.startsWith(n)&&sessionStorage.removeItem(e)}),N.forEach(n=>{(!e||n.route.namespace===e)&&(n.update({state:`idle`,source:null,data:null,error:null,isFetching:!1}),t&&n.fetch(!0))})}var V=0;function H(e,t){let n=`ax-on:${t}`;e.hasAttribute(n)&&w(e.getAttribute(n),k(e))}function U(e,t,n){if(!$.debug)return;let r=e===`OUT`?`#7c3aed`:`#059669`;console.groupCollapsed(`%c${e===`OUT`?`āž” WASM CALL`:`← WASM RESP`} [#${t}]`,`color: ${r}; font-weight: bold;`),console.log(`Details:`,n),console.groupEnd()}function W(e,t){let n=t.trim().match(/^([\w\.\-]+)(?:\((.*)\))?$/);if(!n)return null;let r=n[1],i={};if(n[2]&&n[2].trim()!==``)try{if(e){let t=k(e),r=t.data||ee(e);i=Function(`$data`,`$state`,`return (${n[2]});`)(r??null,t)||{}}else i=Function(`return (${n[2]});`)()||{}}catch(e){console.error(`ATMX Scope Error in "${t}":`,e)}return{target:r,args:i}}function G(e){let t=e.getAttribute(`ax-query`);if(!t)return;let n=W(e,t);if(!n)return;let r=o(n.target);if(!r){A(e,{state:`error`,error:{message:`Route not found: ${n.target}`}});return}let i=`${n.target}:${JSON.stringify(n.args)}`,a=N.get(i);a||(a=new M(i,r,n.args),N.set(i,a)),e._axListener||(e._axListener=t=>{A(e,t),(t.state===`data`||t.state===`error`)&&(H(e,t.state),e.dispatchEvent(new CustomEvent(`atmx:${t.state}`,{bubbles:!0,detail:t.data||t.error})))},a.subscribe(e._axListener)),a.fetch()}function K(e){let t=e.getAttribute(`ax-mutate`);if(!t)return;let n=W(e,t);if(!n)return;let r=o(n.target);if(!r){console.error(`ATMX: Mutation route not found for target '${n.target}'. Check your ax-mutate attribute.`),A(e,{state:`error`,error:{message:`Route not found: ${n.target}`}}),H(e,`error`);return}A(e,{state:`mutating`,error:null,data:null}),H(e,`mutating`);let i={};e instanceof HTMLFormElement&&new FormData(e).forEach((t,n)=>{let r=e.elements.namedItem(n),a=!1;r instanceof HTMLInputElement?a=r.type===`number`:r instanceof RadioNodeList&&r.length>0&&(a=r[0].type===`number`);let o=a&&t!==``?Number(t):t;if(n.includes(`.`)){let e=n.split(`.`),t=i;for(let n=0;n<e.length-1;n++)t[e[n]]||(t[e[n]]={}),t=t[e[n]];t[e[e.length-1]]=o}else i[n]=o});let{path:a,remainingArgs:c}=s(r,{...i,...n.args}),l=c;r.bodyParam&&c[r.bodyParam]!==void 0&&typeof c[r.bodyParam]==`object`&&(l=c[r.bodyParam]);let u={},d=e.getAttribute(`ax-headers`);if(d)try{u=Function(`return (`+d+`);`)()||{}}catch(e){console.error(`ATMX: Invalid ax-headers syntax`,e)}let f=Object.entries(u).some(([e,t])=>e.toLowerCase()===`content-type`&&t.includes(`application/x-www-form-urlencoded`)),p=new Uint8Array;if(Object.keys(l).length>0)if(f){let e=new URLSearchParams;for(let[t,n]of Object.entries(l))e.append(t,String(n));p=new TextEncoder().encode(e.toString())}else p=new TextEncoder().encode(JSON.stringify(l));q(e,r.namespace,r.id,r.method,a,p,r.isStream,!0,u,f)}function q(e,t,r,i,a,o,s,c,l={},u=!1){let f=++V;U(`OUT`,f,{namespace:t,endpointId:r,method:i,path:a,headers:l,payload:o.length>0?u?new TextDecoder().decode(o):JSON.parse(new TextDecoder().decode(o)):null}),n.set(f,{isStream:s,onResponse:t=>J(e,t,c,f),onComplete:()=>{$.debug&&console.log(`%cāœ” Stream Complete [#${f}]`,`color: #94a3b8;`)}});let p=h(t),g=h(i),_=h(a),v=h(``),y=h(Object.keys(l).length>0?JSON.stringify(l):``),b=m(o);d.axiom_wasm_call(f,p.ptr,p.len,r,g.ptr,g.len,_.ptr,_.len,v.ptr,v.len,y.ptr,y.len,b,o.length),d.axiom_free_memory(p.ptr,p.len),d.axiom_free_memory(g.ptr,g.len),d.axiom_free_memory(_.ptr,_.len),d.axiom_free_memory(v.ptr,v.len),d.axiom_free_memory(y.ptr,y.len),b&&d.axiom_free_memory(b,o.length)}function J(e,n,r,i){if(U(`IN`,i,{eventType:t[n.eventType],data:n.data,error:n.error}),n.eventType===t.Error){A(e,{state:`error`,error:n.error,isFetching:!1,isMutating:!1}),H(e,`error`),e.dispatchEvent(new CustomEvent(`atmx:error`,{bubbles:!0,detail:n.error}));return}if(n.data!==void 0){let i=`network`,a=!1;n.eventType===t.CacheHit?i=`cache`:n.eventType===t.CacheHitAndFetching?(i=`cache`,a=!0):n.eventType===t.NetworkSuccess&&(i=`network`);let s=r?`success`:`data`;if(A(e,{state:s,data:n.data,source:i,isFetching:a,isMutating:!1}),r){let t=e.getAttribute(`ax-invalidates`);t&&t.split(`,`).map(e=>e.trim()).forEach(t=>{let n=C(`\`${t}\``,k(e))||t;$.invalidate(n)});let n=e.getAttribute(`ax-store-token`);if(n){let t=C(n,k(e));if(t){let n=o(W(e,e.getAttribute(`ax-mutate`)).target)?.namespace||`default`,r=e.getAttribute(`ax-token-target`);(r?r.split(`,`).map(e=>e.trim()):[n]).forEach(e=>{$.setNamespaceAuthToken(e,t)})}}}H(e,s),e.dispatchEvent(new CustomEvent(r?`atmx:success`:`atmx:data`,{bubbles:!0,detail:n.data}))}}var Y=new IntersectionObserver(e=>{e.forEach(e=>{if(e.isIntersecting){let t=e.target;t.hasAttribute(`ax-query`)&&G(t),Y.unobserve(t)}})});function X(e){e.querySelectorAll(`[\\:ax-query], [\\:ax-mutate]`).forEach(e=>{if(e.hasAttribute(`:ax-query`)){let t=C(e.getAttribute(`:ax-query`),k(e));t&&e.setAttribute(`ax-query`,String(t)),e.removeAttribute(`:ax-query`)}if(e.hasAttribute(`:ax-mutate`)){let t=C(e.getAttribute(`:ax-mutate`),k(e));t&&e.setAttribute(`ax-mutate`,String(t)),e.removeAttribute(`:ax-mutate`)}})}function te(e=document){X(e),e.querySelectorAll(`[ax-query]`).forEach(e=>{let t=e,n=t.getAttribute(`ax-query`);if(!n)return;let r=W(t,n);if(r){let e=`${r.target}:${JSON.stringify(r.args)}`;try{let n=sessionStorage.getItem(`atmx_cache_${e}`);n&&A(t,{state:`data`,data:JSON.parse(n),source:`cache`,isFetching:!0})}catch{}}})}function Z(e=document){X(e),e.querySelectorAll(`[ax-query]`).forEach(e=>{let t=e;A(t,{});let n=t.getAttribute(`ax-trigger`)||`load`;n===`load`?G(t):n===`intersect`?Y.observe(t):t.addEventListener(n,e=>{e.preventDefault(),G(t)})}),e.querySelectorAll(`[ax-mutate]`).forEach(e=>{let t=e;A(t,{});let n=t.tagName===`FORM`?`submit`:`click`;t.addEventListener(n,e=>{(t.tagName===`A`||t.tagName===`BUTTON`||t.tagName===`FORM`)&&e.preventDefault(),K(t)})}),e.querySelectorAll(`[ax-trigger="refresh"]`).forEach(e=>{let t=e;t.addEventListener(`click`,e=>{e.preventDefault();let n=t.closest(`[ax-query]`);if(n){let e=W(n,n.getAttribute(`ax-query`));if(e&&o(e.target)){let t=`${e.target}:${JSON.stringify(e.args)}`,r=N.get(t);r?r.fetch(!0):G(n)}}})})}function ne(){new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{e instanceof HTMLElement&&Z(e)})})}).observe(document.body,{childList:!0,subtree:!0})}var re=class extends HTMLElement{constructor(){super()}connectedCallback(){let e=this.getAttribute(`loading-text`)||`Initializing...`,t=this.getAttribute(`ready-text`)||`Online`,n=this.getAttribute(`error-text`)||`Failed to Connect`;this.renderState(`loading`,e,`text-amber-500 animate-pulse`),document.addEventListener(`atmx:ready`,()=>{this.renderState(`ready`,t,`text-green-600`)}),document.addEventListener(`atmx:error`,e=>{let t=e;t.detail&&t.detail.stage===`runtime`&&this.renderState(`error`,`${n}: ${t.detail.message}`,`text-red-600`)})}renderState(e,t,n){this.setAttribute(`data-state`,e);let r=this.querySelectorAll(`[data-ax-when]`);r.length>0?r.forEach(t=>{t.getAttribute(`data-ax-when`)===e?t.removeAttribute(`hidden`):t.setAttribute(`hidden`,``)}):(this.innerText=t,this.getAttribute(`class`)||(this.className=`text-xs font-bold ${n}`))}};typeof window<`u`&&!customElements.get(`ax-engine-status`)&&customElements.define(`ax-engine-status`,re);var Q=`0.129.0`,$=new class{version=Q;initialized=!1;debug=!1;async init(e){if(this.initialized)return{ok:!0,contracts:{},initDurationMs:0};let t=await _(e);return t.ok?(this.debug=e.debug||!1,ne(),Z(document.body),this.initialized=!0,this.debug&&console.log(`%cšŸš€ ATMX Debug Mode: Enabled`,`color: #2563eb; font-weight: bold;`),console.log(`āœ… ATMX v${this.version} Online (${t.initDurationMs}ms). Reactive Engine Started.`),document.dispatchEvent(new CustomEvent(`atmx:ready`,{detail:t}))):(console.error(`āŒ ATMX Initialization Failed:`,t.error),document.dispatchEvent(new CustomEvent(`atmx:error`,{detail:t.error}))),t}hydrate(e){let t=document;e&&(t=typeof e==`string`?document.querySelector(e):e),t&&te(t)}triggerQuery(e){let t=typeof e==`string`?document.querySelector(e):e;t&&t instanceof HTMLElement&&t.hasAttribute(`ax-query`)&&G(t)}on(e,t){document.addEventListener(`atmx:${e}`,t)}setAuthToken(e,t,n){v(e,t,n)}setNamespaceAuthToken(e,t){y(e,t)}setGlobalAuthToken(e){S(e)}sendStreamMessage(e,t){x(e,t)}clearAuthToken(e,t){b(e,t)}connect(e){let t=W(null,e);if(!t)return;let n=o(t.target);if(!n)return;let r=`${n.namespace}:${n.id}:${JSON.stringify(t.args)}`,i=N.get(r);i||(i=new M(r,n,t.args),N.set(r,i)),i.fetch()}disconnect(e){let t=W(null,e);if(!t)return;let r=o(t.target);if(!r)return;let i=`${r.namespace}:${r.id}:${JSON.stringify(t.args)}`,a=N.get(i);a&&(a.currentReqId&&n.delete(a.currentReqId),N.delete(i),this.debug&&console.log(`šŸ”Œ ATMX Disconnected Stream: ${e}`))}send(e,t){let n=W(null,e);if(!n)return;let r=o(n.target);if(!r)return;let i=`${r.namespace}:${r.id}:${JSON.stringify(n.args)}`,a=N.get(i);a&&a.currentReqId?x(a.currentReqId,t):console.warn(`ATMX: Cannot send message, stream not active for ${e}`)}mutate(e,t,n){return L(e,t,n)}query(e,t={}){return I(e,t)}getCachedQueryData(e,t={}){return F(e,t)}mutateBytes(e,t,n,r={}){return L(e,t,{},{rawBody:n,headers:r})}invalidate(e,t){R(e,t)}setQueryData(e,t,n){z(e,t,n)}clearCache(e){B(e)}purgeCache(e){B(e,!1)}onError(e){document.addEventListener(`atmx:error`,t=>{e(t.detail)})}};typeof window<`u`&&(window.atmx=$),e.ATMX_VERSION=Q,e.allocBytes=m,e.allocString=h,e.atmx=$,e.buildRequestPath=s,e.clearAuthToken=b,e.initWasm=_,e.pendingRequests=n,e.resolveRoute=o,e.sendStreamMessage=x,e.setAuthToken=v,e.setGlobalAuthToken=S,Object.defineProperty(e,`wasmEngine`,{enumerable:!0,get:function(){return d}})});
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { AtmxConfig, AxiomError, InitResult } from './core/types';
2
- export declare const ATMX_VERSION = "0.128.0";
2
+ export declare const ATMX_VERSION = "0.129.0";
3
3
  declare class ATMX {
4
4
  version: string;
5
5
  initialized: boolean;
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "files": [
4
4
  "dist"
5
5
  ],
6
- "version": "0.128.0",
6
+ "version": "0.129.0",
7
7
  "description": "Axiom ATMX Core Runtime for Vanilla Web",
8
8
  "type": "module",
9
9
  "main": "./dist/atmx.umd.js",