@serfab/cadre-host 0.9.0 → 0.11.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/auth/index.d.ts +2 -0
- package/dist/auth/index.js +1 -0
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/self-label.d.ts +36 -0
- package/dist/auth/self-label.js +57 -0
- package/dist/auth/self-label.js.map +1 -0
- package/dist/auth/trust-circle.d.ts +32 -5
- package/dist/auth/trust-circle.js +31 -11
- package/dist/auth/trust-circle.js.map +1 -1
- package/dist/bin/host.js +41 -5
- package/dist/bin/host.js.map +1 -1
- package/dist/donation/__tests__/fake-orchestrator.d.ts +103 -0
- package/dist/donation/__tests__/fake-orchestrator.js +180 -0
- package/dist/donation/__tests__/fake-orchestrator.js.map +1 -0
- package/dist/donation/donation-service.d.ts +237 -12
- package/dist/donation/donation-service.js +491 -34
- package/dist/donation/donation-service.js.map +1 -1
- package/dist/donation/donation-store.d.ts +7 -0
- package/dist/donation/donation-store.js +7 -0
- package/dist/donation/donation-store.js.map +1 -1
- package/dist/donation/donation-supervisor.d.ts +167 -0
- package/dist/donation/donation-supervisor.js +341 -0
- package/dist/donation/donation-supervisor.js.map +1 -0
- package/dist/donation/index.d.ts +4 -2
- package/dist/donation/index.js +2 -1
- package/dist/donation/index.js.map +1 -1
- package/dist/donation/types.d.ts +26 -0
- package/dist/donation/types.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/orchestrator/host-process-orchestrator.d.ts +109 -5
- package/dist/orchestrator/host-process-orchestrator.js +341 -98
- package/dist/orchestrator/host-process-orchestrator.js.map +1 -1
- package/dist/orchestrator/node-identity.d.ts +26 -0
- package/dist/orchestrator/node-identity.js +36 -0
- package/dist/orchestrator/node-identity.js.map +1 -0
- package/dist/orchestrator/port-allocator.d.ts +14 -0
- package/dist/orchestrator/port-allocator.js +45 -0
- package/dist/orchestrator/port-allocator.js.map +1 -1
- package/dist/owner/owner-node-client.d.ts +20 -5
- package/dist/owner/owner-node-client.js +21 -4
- package/dist/owner/owner-node-client.js.map +1 -1
- package/dist/server/error-handler.d.ts +7 -1
- package/dist/server/error-handler.js +23 -1
- package/dist/server/error-handler.js.map +1 -1
- package/dist/server/events/types.d.ts +3 -0
- package/dist/server/index.d.ts +7 -0
- package/dist/server/index.js +9 -3
- package/dist/server/index.js.map +1 -1
- package/dist/server/routes/grants.js +22 -3
- package/dist/server/routes/grants.js.map +1 -1
- package/dist/server/routes/strands.d.ts +20 -0
- package/dist/server/routes/strands.js +38 -0
- package/dist/server/routes/strands.js.map +1 -0
- package/dist/server/static.js +38 -38
- package/dist/strands/index.d.ts +7 -0
- package/dist/strands/index.js +6 -0
- package/dist/strands/index.js.map +1 -0
- package/dist/strands/strand-service.d.ts +50 -0
- package/dist/strands/strand-service.js +103 -0
- package/dist/strands/strand-service.js.map +1 -0
- package/dist/strands/types.d.ts +93 -0
- package/dist/strands/types.js +23 -0
- package/dist/strands/types.js.map +1 -0
- package/dist/ui/assets/index-BVoqLjyX.css +1 -0
- package/dist/ui/assets/index-C-iks41M.js +17 -0
- package/dist/ui/assets/index-C-iks41M.js.map +1 -0
- package/dist/ui/index.html +14 -14
- package/dist/update/release-key.d.ts +1 -1
- package/dist/update/release-key.js +1 -1
- package/package.json +5 -5
- package/service/cadre-host.service.tmpl +16 -16
- package/service/com.serfab.cadre-host.plist.tmpl +35 -35
- package/service/install-service.ps1 +98 -98
- package/service/uninstall-service.ps1 +19 -19
- package/src/__tests__/build-targets.test.ts +26 -0
- package/src/__tests__/cli-invite.smoke.test.ts +192 -192
- package/src/__tests__/cli-nat.smoke.test.ts +212 -212
- package/src/__tests__/cli.smoke.test.ts +46 -46
- package/src/__tests__/global-setup.ts +51 -0
- package/src/__tests__/host-owner.smoke.test.ts +123 -123
- package/src/__tests__/orchestrator-env-scrub.test.ts +140 -0
- package/src/__tests__/orchestrator-node-identity.test.ts +204 -0
- package/src/__tests__/orchestrator-owner.test.ts +198 -198
- package/src/__tests__/orchestrator-pin-keys.test.ts +153 -153
- package/src/__tests__/orchestrator-push.test.ts +145 -145
- package/src/__tests__/orchestrator.test.ts +951 -570
- package/src/auth/__tests__/duration.test.ts +28 -28
- package/src/auth/__tests__/self-label.test.ts +85 -0
- package/src/auth/__tests__/trust-circle-integration.test.ts +152 -147
- package/src/auth/__tests__/trust-circle-store.test.ts +115 -115
- package/src/auth/__tests__/trust-circle.test.ts +445 -401
- package/src/auth/duration.ts +33 -33
- package/src/auth/index.ts +21 -19
- package/src/auth/self-label.ts +74 -0
- package/src/auth/trust-circle-store.ts +155 -155
- package/src/auth/trust-circle.ts +45 -13
- package/src/auth/types.ts +99 -99
- package/src/bin/host.ts +1299 -1258
- package/src/donation/__tests__/donation-service.test.ts +1068 -290
- package/src/donation/__tests__/donation-supervisor.test.ts +510 -0
- package/src/donation/__tests__/fake-orchestrator.test.ts +168 -0
- package/src/donation/__tests__/fake-orchestrator.ts +225 -0
- package/src/donation/__tests__/grant-service.test.ts +213 -213
- package/src/donation/__tests__/grant-store.test.ts +113 -113
- package/src/donation/donation-service.ts +962 -392
- package/src/donation/donation-store.ts +171 -164
- package/src/donation/donation-supervisor.ts +388 -0
- package/src/donation/grant-service.ts +200 -200
- package/src/donation/grant-store.ts +152 -152
- package/src/donation/index.ts +64 -49
- package/src/donation/types.ts +243 -220
- package/src/index.ts +14 -0
- package/src/installer/__tests__/identity.test.ts +34 -34
- package/src/installer/__tests__/paths.test.ts +47 -47
- package/src/installer/__tests__/service-host.test.ts +62 -62
- package/src/installer/__tests__/wizard.test.ts +64 -64
- package/src/installer/identity.ts +49 -49
- package/src/installer/paths.ts +109 -109
- package/src/installer/platform.ts +27 -27
- package/src/installer/service-host/index.ts +21 -21
- package/src/installer/service-host/template.ts +21 -21
- package/src/installer/wizard.ts +103 -103
- package/src/nat/__tests__/address-resolver.test.ts +82 -82
- package/src/nat/__tests__/ddns-duckdns.test.ts +83 -83
- package/src/nat/__tests__/ddns-updater.test.ts +253 -253
- package/src/nat/__tests__/external-ip.test.ts +124 -124
- package/src/nat/__tests__/nat-service.test.ts +497 -497
- package/src/nat/__tests__/nat-store.test.ts +93 -93
- package/src/nat/__tests__/port-mapper.test.ts +191 -191
- package/src/nat/__tests__/reachability.test.ts +24 -24
- package/src/nat/__tests__/secrets.test.ts +178 -178
- package/src/nat/address-resolver.ts +51 -51
- package/src/nat/ddns/duckdns.ts +76 -76
- package/src/nat/ddns/index.ts +55 -55
- package/src/nat/ddns/updater.ts +243 -243
- package/src/nat/external-ip.ts +154 -154
- package/src/nat/index.ts +71 -71
- package/src/nat/nat-service.ts +501 -501
- package/src/nat/nat-store.ts +154 -154
- package/src/nat/port-mapper.ts +329 -329
- package/src/nat/reachability.ts +34 -34
- package/src/nat/secrets/file-store.ts +130 -130
- package/src/nat/secrets/index.ts +112 -112
- package/src/nat/secrets/keytar-store.ts +67 -67
- package/src/nat/types.ts +159 -159
- package/src/orchestrator/__tests__/node-identity.test.ts +62 -0
- package/src/orchestrator/host-process-orchestrator.ts +1133 -894
- package/src/orchestrator/index.ts +10 -10
- package/src/orchestrator/log-rotator.ts +53 -53
- package/src/orchestrator/node-identity.ts +40 -0
- package/src/orchestrator/pid-liveness.ts +24 -24
- package/src/orchestrator/port-allocator.ts +91 -43
- package/src/orchestrator/state-store.ts +90 -90
- package/src/orchestrator/types.ts +141 -141
- package/src/owner/__tests__/owner-node-client.test.ts +194 -194
- package/src/owner/index.ts +12 -12
- package/src/owner/owner-node-client.ts +259 -233
- package/src/push/__tests__/push.test.ts +90 -90
- package/src/push/index.ts +146 -146
- package/src/server/__tests__/bus.test.ts +38 -38
- package/src/server/__tests__/error-handler.test.ts +118 -118
- package/src/server/__tests__/grants-admin-route.test.ts +73 -73
- package/src/server/__tests__/grants-route.test.ts +263 -189
- package/src/server/__tests__/nodes-route.test.ts +259 -259
- package/src/server/__tests__/origin-guard.test.ts +72 -72
- package/src/server/__tests__/publishers.test.ts +216 -216
- package/src/server/__tests__/server.smoke.test.ts +253 -253
- package/src/server/__tests__/settings-route.test.ts +194 -194
- package/src/server/__tests__/sse-route.test.ts +119 -119
- package/src/server/__tests__/static.test.ts +145 -145
- package/src/server/__tests__/status-route.test.ts +134 -134
- package/src/server/__tests__/strands-route.test.ts +233 -0
- package/src/server/error-handler.ts +178 -155
- package/src/server/events/bus.ts +42 -42
- package/src/server/events/sse-route.ts +81 -81
- package/src/server/events/types.ts +23 -22
- package/src/server/index.ts +267 -254
- package/src/server/origin-guard.ts +84 -84
- package/src/server/routes/grants-admin.ts +41 -41
- package/src/server/routes/grants.ts +210 -186
- package/src/server/routes/nat.ts +63 -63
- package/src/server/routes/nodes.ts +170 -170
- package/src/server/routes/settings.ts +123 -123
- package/src/server/routes/status.ts +118 -118
- package/src/server/routes/strands.ts +54 -0
- package/src/server/routes/trust-circle.ts +49 -49
- package/src/server/routes/update.ts +43 -43
- package/src/server/server.ts +122 -122
- package/src/server/settings-store.ts +37 -37
- package/src/server/static.ts +207 -207
- package/src/strands/__tests__/strand-service.test.ts +165 -0
- package/src/strands/index.ts +14 -0
- package/src/strands/strand-service.ts +135 -0
- package/src/strands/types.ts +102 -0
- package/src/update/__tests__/apply.test.ts +158 -158
- package/src/update/__tests__/manifest.test.ts +128 -128
- package/src/update/__tests__/release-key.test.ts +42 -42
- package/src/update/__tests__/sign.test.ts +78 -78
- package/src/update/__tests__/store.test.ts +81 -81
- package/src/update/__tests__/update-service.integration.test.ts +256 -256
- package/src/update/__tests__/version.test.ts +31 -31
- package/src/update/apply.ts +190 -190
- package/src/update/index.ts +341 -341
- package/src/update/release-key.ts +71 -71
- package/src/update/sign.ts +74 -74
- package/src/update/store.ts +101 -101
- package/src/update/types.ts +109 -109
- package/src/update/version.ts +80 -80
- package/dist/ui/assets/index-BlMXQPSw.js +0 -14
- package/dist/ui/assets/index-BlMXQPSw.js.map +0 -1
- package/dist/ui/assets/index-BwU5mJGF.css +0 -1
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))n(a);new MutationObserver(a=>{for(const i of a)if(i.type==="childList")for(const s of i.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&n(s)}).observe(document,{childList:!0,subtree:!0});function r(a){const i={};return a.integrity&&(i.integrity=a.integrity),a.referrerPolicy&&(i.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?i.credentials="include":a.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function n(a){if(a.ep)return;a.ep=!0;const i=r(a);fetch(a.href,i)}})();const es=!1;var In=Array.isArray,ts=Array.prototype.indexOf,jt=Array.prototype.includes,Ir=Array.from,rs=Object.defineProperty,nr=Object.getOwnPropertyDescriptor,qa=Object.getOwnPropertyDescriptors,ns=Object.prototype,as=Array.prototype,xn=Object.getPrototypeOf,Kn=Object.isExtensible;const is=()=>{};function ss(e){return e()}function ln(e){for(var t=0;t<e.length;t++)e[t]()}function Ua(){var e,t,r=new Promise((n,a)=>{e=n,t=a});return{promise:r,resolve:e,reject:t}}const Ee=2,Vt=4,ur=8,Fa=1<<24,Ge=16,Ve=32,_t=64,cn=128,Be=512,_e=1024,ye=2048,Qe=4096,ke=8192,De=16384,Lt=32768,Yn=1<<25,Ht=65536,un=1<<17,os=1<<18,Qt=1<<19,Oa=1<<20,Ke=1<<25,Rt=65536,br=1<<21,or=1<<22,ht=1<<23,At=Symbol("$state"),ls=Symbol(""),at=new class extends Error{name="StaleReactionError";message="The reaction that called `getAbortSignal()` was re-run or destroyed"},cs=!!globalThis.document?.contentType&&globalThis.document.contentType.includes("xml");function $a(e){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function us(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function ds(e,t,r){throw new Error("https://svelte.dev/e/each_key_duplicate")}function fs(e){throw new Error("https://svelte.dev/e/effect_in_teardown")}function vs(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function hs(e){throw new Error("https://svelte.dev/e/effect_orphan")}function ps(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function gs(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function _s(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function ms(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function ys(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}const bs=1,ws=2,za=4,Es=8,ks=16,Cs=1,Ss=2,me=Symbol(),ja="http://www.w3.org/1999/xhtml",Ts="http://www.w3.org/2000/svg",As="http://www.w3.org/1998/Math/MathML";function Is(){console.warn("https://svelte.dev/e/derived_inert")}function xs(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function Ms(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}function Va(e){return e===this.v}function Rs(e,t){return e!=e?t==t:e!==t||e!==null&&typeof e=="object"||typeof e=="function"}function Ha(e){return!Rs(e,this.v)}let dr=!1,Ns=!1;function Ps(){dr=!0}let de=null;function Kt(e){de=e}function Ie(e,t=!1,r){de={p:de,i:!1,c:null,e:null,s:e,x:null,r:Y,l:dr&&!t?{s:null,u:null,$:[]}:null}}function xe(e){var t=de,r=t.e;if(r!==null){t.e=null;for(var n of r)ui(n)}return t.i=!0,de=t.p,{}}function fr(){return!dr||de!==null&&de.l===null}let Ct=[];function Ka(){var e=Ct;Ct=[],ln(e)}function pt(e){if(Ct.length===0&&!ar){var t=Ct;queueMicrotask(()=>{t===Ct&&Ka()})}Ct.push(e)}function Ls(){for(;Ct.length>0;)Ka()}function Ya(e){var t=Y;if(t===null)return G.f|=ht,e;if((t.f&Lt)===0&&(t.f&Vt)===0)throw e;vt(e,t)}function vt(e,t){for(;t!==null;){if((t.f&cn)!==0){if((t.f&Lt)===0)throw e;try{t.b.error(e);return}catch(r){e=r}}t=t.parent}throw e}const Bs=-7169;function ve(e,t){e.f=e.f&Bs|t}function Mn(e){(e.f&Be)!==0||e.deps===null?ve(e,_e):ve(e,Qe)}function Ja(e){if(e!==null)for(const t of e)(t.f&Ee)===0||(t.f&Rt)===0||(t.f^=Rt,Ja(t.deps))}function Ga(e,t,r){(e.f&ye)!==0?t.add(e):(e.f&Qe)!==0&&r.add(e),Ja(e.deps),ve(e,_e)}const kt=new Set;let z=null,$e=null,dn=null,ar=!1,Lr=!1,Ot=null,mr=null;var Jn=0;let Ds=1;class mt{id=Ds++;current=new Map;previous=new Map;#r=new Set;#l=new Set;#e=new Set;#a=new Map;#n=new Map;#i=null;#t=[];#s=[];#c=new Set;#u=new Set;#o=new Map;#f=new Set;is_fork=!1;#h=!1;#v=new Set;#d(){return this.is_fork||this.#n.size>0}#_(){for(const n of this.#v)for(const a of n.#n.keys()){for(var t=!1,r=a;r.parent!==null;){if(this.#o.has(r)){t=!0;break}r=r.parent}if(!t)return!0}return!1}skip_effect(t){this.#o.has(t)||this.#o.set(t,{d:[],m:[]}),this.#f.delete(t)}unskip_effect(t,r=n=>this.schedule(n)){var n=this.#o.get(t);if(n){this.#o.delete(t);for(var a of n.d)ve(a,ye),r(a);for(a of n.m)ve(a,Qe),r(a)}this.#f.add(t)}#p(){if(Jn++>1e3&&(kt.delete(this),Us()),!this.#d()){for(const l of this.#c)this.#u.delete(l),ve(l,ye),this.schedule(l);for(const l of this.#u)ve(l,Qe),this.schedule(l)}const t=this.#t;this.#t=[],this.apply();var r=Ot=[],n=[],a=mr=[];for(const l of t)try{this.#m(l,r,n)}catch(o){throw Xa(l),o}if(z=null,a.length>0){var i=mt.ensure();for(const l of a)i.schedule(l)}if(Ot=null,mr=null,this.#d()||this.#_()){this.#g(n),this.#g(r);for(const[l,o]of this.#o)Wa(l,o)}else{this.#a.size===0&&kt.delete(this),this.#c.clear(),this.#u.clear();for(const l of this.#r)l(this);this.#r.clear(),Gn(n),Gn(r),this.#i?.resolve()}var s=z;if(this.#t.length>0){const l=s??=this;l.#t.push(...this.#t.filter(o=>!l.#t.includes(o)))}s!==null&&(kt.add(s),s.#p())}#m(t,r,n){t.f^=_e;for(var a=t.first;a!==null;){var i=a.f,s=(i&(Ve|_t))!==0,l=s&&(i&_e)!==0,o=l||(i&ke)!==0||this.#o.has(a);if(!o&&a.fn!==null){s?a.f^=_e:(i&Vt)!==0?r.push(a):hr(a)&&((i&Ge)!==0&&this.#u.add(a),Jt(a));var c=a.first;if(c!==null){a=c;continue}}for(;a!==null;){var u=a.next;if(u!==null){a=u;break}a=a.parent}}}#g(t){for(var r=0;r<t.length;r+=1)Ga(t[r],this.#c,this.#u)}capture(t,r,n=!1){t.v!==me&&!this.previous.has(t)&&this.previous.set(t,t.v),(t.f&ht)===0&&(this.current.set(t,[r,n]),$e?.set(t,r)),this.is_fork||(t.v=r)}activate(){z=this}deactivate(){z=null,$e=null}flush(){try{Lr=!0,z=this,this.#p()}finally{Jn=0,dn=null,Ot=null,mr=null,Lr=!1,z=null,$e=null,It.clear()}}discard(){for(const t of this.#l)t(this);this.#l.clear(),this.#e.clear(),kt.delete(this)}register_created_effect(t){this.#s.push(t)}#y(){for(const u of kt){var t=u.id<this.id,r=[];for(const[h,[v,_]]of this.current){if(u.current.has(h)){var n=u.current.get(h)[0];if(t&&v!==n)u.current.set(h,[v,_]);else continue}r.push(h)}var a=[...u.current.keys()].filter(h=>!this.current.has(h));if(a.length===0)t&&u.discard();else if(r.length>0){if(t)for(const h of this.#f)u.unskip_effect(h,v=>{(v.f&(Ge|or))!==0?u.schedule(v):u.#g([v])});u.activate();var i=new Set,s=new Map;for(var l of r)Qa(l,a,i,s);s=new Map;var o=[...u.current.keys()].filter(h=>this.current.has(h)?this.current.get(h)[0]!==h:!0);for(const h of this.#s)(h.f&(De|ke|un))===0&&Rn(h,o,s)&&((h.f&(or|Ge))!==0?(ve(h,ye),u.schedule(h)):u.#c.add(h));if(u.#t.length>0){u.apply();for(var c of u.#t)u.#m(c,[],[]);u.#t=[]}u.deactivate()}}for(const u of kt)u.#v.has(this)&&(u.#v.delete(this),u.#v.size===0&&!u.#d()&&(u.activate(),u.#p()))}increment(t,r){let n=this.#a.get(r)??0;if(this.#a.set(r,n+1),t){let a=this.#n.get(r)??0;this.#n.set(r,a+1)}}decrement(t,r,n){let a=this.#a.get(r)??0;if(a===1?this.#a.delete(r):this.#a.set(r,a-1),t){let i=this.#n.get(r)??0;i===1?this.#n.delete(r):this.#n.set(r,i-1)}this.#h||n||(this.#h=!0,pt(()=>{this.#h=!1,this.flush()}))}transfer_effects(t,r){for(const n of t)this.#c.add(n);for(const n of r)this.#u.add(n);t.clear(),r.clear()}oncommit(t){this.#r.add(t)}ondiscard(t){this.#l.add(t)}on_fork_commit(t){this.#e.add(t)}run_fork_commit_callbacks(){for(const t of this.#e)t(this);this.#e.clear()}settled(){return(this.#i??=Ua()).promise}static ensure(){if(z===null){const t=z=new mt;Lr||(kt.add(z),ar||pt(()=>{z===t&&t.flush()}))}return z}apply(){{$e=null;return}}schedule(t){if(dn=t,t.b?.is_pending&&(t.f&(Vt|ur|Fa))!==0&&(t.f&Lt)===0){t.b.defer_effect(t);return}for(var r=t;r.parent!==null;){r=r.parent;var n=r.f;if(Ot!==null&&r===Y&&(G===null||(G.f&Ee)===0))return;if((n&(_t|Ve))!==0){if((n&_e)===0)return;r.f^=_e}}this.#t.push(r)}}function qs(e){var t=ar;ar=!0;try{for(var r;;){if(Ls(),z===null)return r;z.flush()}}finally{ar=t}}function Us(){try{ps()}catch(e){vt(e,dn)}}let nt=null;function Gn(e){var t=e.length;if(t!==0){for(var r=0;r<t;){var n=e[r++];if((n.f&(De|ke))===0&&hr(n)&&(nt=new Set,Jt(n),n.deps===null&&n.first===null&&n.nodes===null&&n.teardown===null&&n.ac===null&&vi(n),nt?.size>0)){It.clear();for(const a of nt){if((a.f&(De|ke))!==0)continue;const i=[a];let s=a.parent;for(;s!==null;)nt.has(s)&&(nt.delete(s),i.push(s)),s=s.parent;for(let l=i.length-1;l>=0;l--){const o=i[l];(o.f&(De|ke))===0&&Jt(o)}}nt.clear()}}nt=null}}function Qa(e,t,r,n){if(!r.has(e)&&(r.add(e),e.reactions!==null))for(const a of e.reactions){const i=a.f;(i&Ee)!==0?Qa(a,t,r,n):(i&(or|Ge))!==0&&(i&ye)===0&&Rn(a,t,n)&&(ve(a,ye),Nn(a))}}function Rn(e,t,r){const n=r.get(e);if(n!==void 0)return n;if(e.deps!==null)for(const a of e.deps){if(jt.call(t,a))return!0;if((a.f&Ee)!==0&&Rn(a,t,r))return r.set(a,!0),!0}return r.set(e,!1),!1}function Nn(e){z.schedule(e)}function Wa(e,t){if(!((e.f&Ve)!==0&&(e.f&_e)!==0)){(e.f&ye)!==0?t.d.push(e):(e.f&Qe)!==0&&t.m.push(e),ve(e,_e);for(var r=e.first;r!==null;)Wa(r,t),r=r.next}}function Xa(e){ve(e,_e);for(var t=e.first;t!==null;)Xa(t),t=t.next}function Fs(e){let t=0,r=Nt(0),n;return()=>{Bn()&&(f(r),qn(()=>(t===0&&(n=Wt(()=>e(()=>ir(r)))),t+=1,()=>{pt(()=>{t-=1,t===0&&(n?.(),n=void 0,ir(r))})})))}}var Os=Ht|Qt;function $s(e,t,r,n){new zs(e,t,r,n)}class zs{parent;is_pending=!1;transform_error;#r;#l=null;#e;#a;#n;#i=null;#t=null;#s=null;#c=null;#u=0;#o=0;#f=!1;#h=new Set;#v=new Set;#d=null;#_=Fs(()=>(this.#d=Nt(this.#u),()=>{this.#d=null}));constructor(t,r,n,a){this.#r=t,this.#e=r,this.#a=i=>{var s=Y;s.b=this,s.f|=cn,n(i)},this.parent=Y.b,this.transform_error=a??this.parent?.transform_error??(i=>i),this.#n=Un(()=>{this.#y()},Os)}#p(){try{this.#i=Le(()=>this.#a(this.#r))}catch(t){this.error(t)}}#m(t){const r=this.#e.failed;r&&(this.#s=Le(()=>{r(this.#r,()=>t,()=>()=>{})}))}#g(){const t=this.#e.pending;t&&(this.is_pending=!0,this.#t=Le(()=>t(this.#r)),pt(()=>{var r=this.#c=document.createDocumentFragment(),n=it();r.append(n),this.#i=this.#w(()=>Le(()=>this.#a(n))),this.#o===0&&(this.#r.before(r),this.#c=null,xt(this.#t,()=>{this.#t=null}),this.#b(z))}))}#y(){try{if(this.is_pending=this.has_pending_snippet(),this.#o=0,this.#u=0,this.#i=Le(()=>{this.#a(this.#r)}),this.#o>0){var t=this.#c=document.createDocumentFragment();$n(this.#i,t);const r=this.#e.pending;this.#t=Le(()=>r(this.#r))}else this.#b(z)}catch(r){this.error(r)}}#b(t){this.is_pending=!1,t.transfer_effects(this.#h,this.#v)}defer_effect(t){Ga(t,this.#h,this.#v)}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!this.#e.pending}#w(t){var r=Y,n=G,a=de;We(this.#n),Ue(this.#n),Kt(this.#n.ctx);try{return mt.ensure(),t()}catch(i){return Ya(i),null}finally{We(r),Ue(n),Kt(a)}}#E(t,r){if(!this.has_pending_snippet()){this.parent&&this.parent.#E(t,r);return}this.#o+=t,this.#o===0&&(this.#b(r),this.#t&&xt(this.#t,()=>{this.#t=null}),this.#c&&(this.#r.before(this.#c),this.#c=null))}update_pending_count(t,r){this.#E(t,r),this.#u+=t,!(!this.#d||this.#f)&&(this.#f=!0,pt(()=>{this.#f=!1,this.#d&&Yt(this.#d,this.#u)}))}get_effect_pending(){return this.#_(),f(this.#d)}error(t){if(!this.#e.onerror&&!this.#e.failed)throw t;z?.is_fork?(this.#i&&z.skip_effect(this.#i),this.#t&&z.skip_effect(this.#t),this.#s&&z.skip_effect(this.#s),z.on_fork_commit(()=>{this.#k(t)})):this.#k(t)}#k(t){this.#i&&(Ae(this.#i),this.#i=null),this.#t&&(Ae(this.#t),this.#t=null),this.#s&&(Ae(this.#s),this.#s=null);var r=this.#e.onerror;let n=this.#e.failed;var a=!1,i=!1;const s=()=>{if(a){Ms();return}a=!0,i&&ys(),this.#s!==null&&xt(this.#s,()=>{this.#s=null}),this.#w(()=>{this.#y()})},l=o=>{try{i=!0,r?.(o,s),i=!1}catch(c){vt(c,this.#n&&this.#n.parent)}n&&(this.#s=this.#w(()=>{try{return Le(()=>{var c=Y;c.b=this,c.f|=cn,n(this.#r,()=>o,()=>s)})}catch(c){return vt(c,this.#n.parent),null}}))};pt(()=>{var o;try{o=this.transform_error(t)}catch(c){vt(c,this.#n&&this.#n.parent);return}o!==null&&typeof o=="object"&&typeof o.then=="function"?o.then(l,c=>vt(c,this.#n&&this.#n.parent)):l(o)})}}function js(e,t,r,n){const a=fr()?xr:Er;var i=e.filter(v=>!v.settled);if(r.length===0&&i.length===0){n(t.map(a));return}var s=Y,l=Vs(),o=i.length===1?i[0].promise:i.length>1?Promise.all(i.map(v=>v.promise)):null;function c(v){l();try{n(v)}catch(_){(s.f&De)===0&&vt(_,s)}wr()}if(r.length===0){o.then(()=>c(t.map(a)));return}var u=Za();function h(){Promise.all(r.map(v=>Hs(v))).then(v=>c([...t.map(a),...v])).catch(v=>vt(v,s)).finally(()=>u())}o?o.then(()=>{l(),h(),wr()}):h()}function Vs(){var e=Y,t=G,r=de,n=z;return function(i=!0){We(e),Ue(t),Kt(r),i&&(e.f&De)===0&&(n?.activate(),n?.apply())}}function wr(e=!0){We(null),Ue(null),Kt(null),e&&z?.deactivate()}function Za(){var e=Y,t=e.b,r=z,n=t.is_rendered();return t.update_pending_count(1,r),r.increment(n,e),(a=!1)=>{t.update_pending_count(-1,r),r.decrement(n,e,a)}}function xr(e){var t=Ee|ye;return Y!==null&&(Y.f|=Qt),{ctx:de,deps:null,effects:null,equals:Va,f:t,fn:e,reactions:null,rv:0,v:me,wv:0,parent:Y,ac:null}}function Hs(e,t,r){let n=Y;n===null&&us();var a=void 0,i=Nt(me),s=!G,l=new Map;return ao(()=>{var o=Y,c=Ua();a=c.promise;try{Promise.resolve(e()).then(c.resolve,c.reject).finally(wr)}catch(_){c.reject(_),wr()}var u=z;if(s){if((o.f&Lt)!==0)var h=Za();if(n.b.is_rendered())l.get(u)?.reject(at),l.delete(u);else{for(const _ of l.values())_.reject(at);l.clear()}l.set(u,c)}const v=(_,k=void 0)=>{if(h){var S=k===at;h(S)}if(!(k===at||(o.f&De)!==0)){if(u.activate(),k)i.f|=ht,Yt(i,k);else{(i.f&ht)!==0&&(i.f^=ht),Yt(i,_);for(const[w,m]of l){if(l.delete(w),w===u)break;m.reject(at)}}u.deactivate()}};c.promise.then(v,_=>v(null,_||"unknown"))}),Dn(()=>{for(const o of l.values())o.reject(at)}),new Promise(o=>{function c(u){function h(){u===a?o(i):c(a)}u.then(h,h)}c(a)})}function ne(e){const t=xr(e);return gi(t),t}function Er(e){const t=xr(e);return t.equals=Ha,t}function Ks(e){var t=e.effects;if(t!==null){e.effects=null;for(var r=0;r<t.length;r+=1)Ae(t[r])}}function Pn(e){var t,r=Y,n=e.parent;if(!bt&&n!==null&&(n.f&(De|ke))!==0)return Is(),e.v;We(n);try{e.f&=~Rt,Ks(e),t=bi(e)}finally{We(r)}return t}function ei(e){var t=Pn(e);if(!e.equals(t)&&(e.wv=mi(),(!z?.is_fork||e.deps===null)&&(z!==null?z.capture(e,t,!0):e.v=t,e.deps===null))){ve(e,_e);return}bt||($e!==null?(Bn()||z?.is_fork)&&$e.set(e,t):Mn(e))}function Ys(e){if(e.effects!==null)for(const t of e.effects)(t.teardown||t.ac)&&(t.teardown?.(),t.ac?.abort(at),t.teardown=is,t.ac=null,lr(t,0),Fn(t))}function ti(e){if(e.effects!==null)for(const t of e.effects)t.teardown&&Jt(t)}let fn=new Set;const It=new Map;let ri=!1;function Nt(e,t){var r={f:0,v:e,reactions:null,equals:Va,rv:0,wv:0};return r}function j(e,t){const r=Nt(e);return gi(r),r}function Js(e,t=!1,r=!0){const n=Nt(e);return t||(n.equals=Ha),dr&&r&&de!==null&&de.l!==null&&(de.l.s??=[]).push(n),n}function B(e,t,r=!1){G!==null&&(!ze||(G.f&un)!==0)&&fr()&&(G.f&(Ee|Ge|or|un))!==0&&(qe===null||!jt.call(qe,e))&&ms();let n=r?Ye(t):t;return Yt(e,n,mr)}function Yt(e,t,r=null){if(!e.equals(t)){It.set(e,bt?t:e.v);var n=mt.ensure();if(n.capture(e,t),(e.f&Ee)!==0){const a=e;(e.f&ye)!==0&&Pn(a),$e===null&&Mn(a)}e.wv=mi(),ni(e,ye,r),fr()&&Y!==null&&(Y.f&_e)!==0&&(Y.f&(Ve|_t))===0&&(Pe===null?so([e]):Pe.push(e)),!n.is_fork&&fn.size>0&&!ri&&Gs()}return t}function Gs(){ri=!1;for(const e of fn)(e.f&_e)!==0&&ve(e,Qe),hr(e)&&Jt(e);fn.clear()}function ir(e){B(e,e.v+1)}function ni(e,t,r){var n=e.reactions;if(n!==null)for(var a=fr(),i=n.length,s=0;s<i;s++){var l=n[s],o=l.f;if(!(!a&&l===Y)){var c=(o&ye)===0;if(c&&ve(l,t),(o&Ee)!==0){var u=l;$e?.delete(u),(o&Rt)===0&&(o&Be&&(Y===null||(Y.f&br)===0)&&(l.f|=Rt),ni(u,Qe,r))}else if(c){var h=l;(o&Ge)!==0&&nt!==null&&nt.add(h),r!==null?r.push(h):Nn(h)}}}}function Ye(e){if(typeof e!="object"||e===null||At in e)return e;const t=xn(e);if(t!==ns&&t!==as)return e;var r=new Map,n=In(e),a=j(0),i=Mt,s=l=>{if(Mt===i)return l();var o=G,c=Mt;Ue(null),ea(i);var u=l();return Ue(o),ea(c),u};return n&&r.set("length",j(e.length)),new Proxy(e,{defineProperty(l,o,c){(!("value"in c)||c.configurable===!1||c.enumerable===!1||c.writable===!1)&&gs();var u=r.get(o);return u===void 0?s(()=>{var h=j(c.value);return r.set(o,h),h}):B(u,c.value,!0),!0},deleteProperty(l,o){var c=r.get(o);if(c===void 0){if(o in l){const u=s(()=>j(me));r.set(o,u),ir(a)}}else B(c,me),ir(a);return!0},get(l,o,c){if(o===At)return e;var u=r.get(o),h=o in l;if(u===void 0&&(!h||nr(l,o)?.writable)&&(u=s(()=>{var _=Ye(h?l[o]:me),k=j(_);return k}),r.set(o,u)),u!==void 0){var v=f(u);return v===me?void 0:v}return Reflect.get(l,o,c)},getOwnPropertyDescriptor(l,o){var c=Reflect.getOwnPropertyDescriptor(l,o);if(c&&"value"in c){var u=r.get(o);u&&(c.value=f(u))}else if(c===void 0){var h=r.get(o),v=h?.v;if(h!==void 0&&v!==me)return{enumerable:!0,configurable:!0,value:v,writable:!0}}return c},has(l,o){if(o===At)return!0;var c=r.get(o),u=c!==void 0&&c.v!==me||Reflect.has(l,o);if(c!==void 0||Y!==null&&(!u||nr(l,o)?.writable)){c===void 0&&(c=s(()=>{var v=u?Ye(l[o]):me,_=j(v);return _}),r.set(o,c));var h=f(c);if(h===me)return!1}return u},set(l,o,c,u){var h=r.get(o),v=o in l;if(n&&o==="length")for(var _=c;_<h.v;_+=1){var k=r.get(_+"");k!==void 0?B(k,me):_ in l&&(k=s(()=>j(me)),r.set(_+"",k))}if(h===void 0)(!v||nr(l,o)?.writable)&&(h=s(()=>j(void 0)),B(h,Ye(c)),r.set(o,h));else{v=h.v!==me;var S=s(()=>Ye(c));B(h,S)}var w=Reflect.getOwnPropertyDescriptor(l,o);if(w?.set&&w.set.call(u,c),!v){if(n&&typeof o=="string"){var m=r.get("length"),I=Number(o);Number.isInteger(I)&&I>=m.v&&B(m,I+1)}ir(a)}return!0},ownKeys(l){f(a);var o=Reflect.ownKeys(l).filter(h=>{var v=r.get(h);return v===void 0||v.v!==me});for(var[c,u]of r)u.v!==me&&!(c in l)&&o.push(c);return o},setPrototypeOf(){_s()}})}function Qn(e){try{if(e!==null&&typeof e=="object"&&At in e)return e[At]}catch{}return e}function Qs(e,t){return Object.is(Qn(e),Qn(t))}var Wn,ai,ii,si;function Ws(){if(Wn===void 0){Wn=window,ai=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,r=Text.prototype;ii=nr(t,"firstChild").get,si=nr(t,"nextSibling").get,Kn(e)&&(e.__click=void 0,e.__className=void 0,e.__attributes=null,e.__style=void 0,e.__e=void 0),Kn(r)&&(r.__t=void 0)}}function it(e=""){return document.createTextNode(e)}function Je(e){return ii.call(e)}function vr(e){return si.call(e)}function d(e,t){return Je(e)}function be(e,t=!1){{var r=Je(e);return r instanceof Comment&&r.data===""?vr(r):r}}function p(e,t=1,r=!1){let n=e;for(;t--;)n=vr(n);return n}function Xs(e){e.textContent=""}function oi(){return!1}function li(e,t,r){return document.createElementNS(t??ja,e,void 0)}let Xn=!1;function Zs(){Xn||(Xn=!0,document.addEventListener("reset",e=>{Promise.resolve().then(()=>{if(!e.defaultPrevented)for(const t of e.target.elements)t.__on_r?.()})},{capture:!0}))}function Mr(e){var t=G,r=Y;Ue(null),We(null);try{return e()}finally{Ue(t),We(r)}}function Ln(e,t,r,n=r){e.addEventListener(t,()=>Mr(r));const a=e.__on_r;a?e.__on_r=()=>{a(),n(!0)}:e.__on_r=()=>n(!0),Zs()}function ci(e){Y===null&&(G===null&&hs(),vs()),bt&&fs()}function eo(e,t){var r=t.last;r===null?t.last=t.first=e:(r.next=e,e.prev=r,t.last=e)}function Xe(e,t){var r=Y;r!==null&&(r.f&ke)!==0&&(e|=ke);var n={ctx:de,deps:null,nodes:null,f:e|ye|Be,first:null,fn:t,last:null,next:null,parent:r,b:r&&r.b,prev:null,teardown:null,wv:0,ac:null};z?.register_created_effect(n);var a=n;if((e&Vt)!==0)Ot!==null?Ot.push(n):mt.ensure().schedule(n);else if(t!==null){try{Jt(n)}catch(s){throw Ae(n),s}a.deps===null&&a.teardown===null&&a.nodes===null&&a.first===a.last&&(a.f&Qt)===0&&(a=a.first,(e&Ge)!==0&&(e&Ht)!==0&&a!==null&&(a.f|=Ht))}if(a!==null&&(a.parent=r,r!==null&&eo(a,r),G!==null&&(G.f&Ee)!==0&&(e&_t)===0)){var i=G;(i.effects??=[]).push(a)}return n}function Bn(){return G!==null&&!ze}function Dn(e){const t=Xe(ur,null);return ve(t,_e),t.teardown=e,t}function yt(e){ci();var t=Y.f,r=!G&&(t&Ve)!==0&&(t&Lt)===0;if(r){var n=de;(n.e??=[]).push(e)}else return ui(e)}function ui(e){return Xe(Vt|Oa,e)}function to(e){return ci(),Xe(ur|Oa,e)}function ro(e){mt.ensure();const t=Xe(_t|Qt,e);return(r={})=>new Promise(n=>{r.outro?xt(t,()=>{Ae(t),n(void 0)}):(Ae(t),n(void 0))})}function no(e){return Xe(Vt,e)}function ao(e){return Xe(or|Qt,e)}function qn(e,t=0){return Xe(ur|t,e)}function F(e,t=[],r=[],n=[]){js(n,t,r,a=>{Xe(ur,()=>e(...a.map(f)))})}function Un(e,t=0){var r=Xe(Ge|t,e);return r}function Le(e){return Xe(Ve|Qt,e)}function di(e){var t=e.teardown;if(t!==null){const r=bt,n=G;Zn(!0),Ue(null);try{t.call(null)}finally{Zn(r),Ue(n)}}}function Fn(e,t=!1){var r=e.first;for(e.first=e.last=null;r!==null;){const a=r.ac;a!==null&&Mr(()=>{a.abort(at)});var n=r.next;(r.f&_t)!==0?r.parent=null:Ae(r,t),r=n}}function io(e){for(var t=e.first;t!==null;){var r=t.next;(t.f&Ve)===0&&Ae(t),t=r}}function Ae(e,t=!0){var r=!1;(t||(e.f&os)!==0)&&e.nodes!==null&&e.nodes.end!==null&&(fi(e.nodes.start,e.nodes.end),r=!0),ve(e,Yn),Fn(e,t&&!r),lr(e,0);var n=e.nodes&&e.nodes.t;if(n!==null)for(const i of n)i.stop();di(e),e.f^=Yn,e.f|=De;var a=e.parent;a!==null&&a.first!==null&&vi(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=e.b=null}function fi(e,t){for(;e!==null;){var r=e===t?null:vr(e);e.remove(),e=r}}function vi(e){var t=e.parent,r=e.prev,n=e.next;r!==null&&(r.next=n),n!==null&&(n.prev=r),t!==null&&(t.first===e&&(t.first=n),t.last===e&&(t.last=r))}function xt(e,t,r=!0){var n=[];hi(e,n,!0);var a=()=>{r&&Ae(e),t&&t()},i=n.length;if(i>0){var s=()=>--i||a();for(var l of n)l.out(s)}else a()}function hi(e,t,r){if((e.f&ke)===0){e.f^=ke;var n=e.nodes&&e.nodes.t;if(n!==null)for(const l of n)(l.is_global||r)&&t.push(l);for(var a=e.first;a!==null;){var i=a.next;if((a.f&_t)===0){var s=(a.f&Ht)!==0||(a.f&Ve)!==0&&(e.f&Ge)!==0;hi(a,t,s?r:!1)}a=i}}}function On(e){pi(e,!0)}function pi(e,t){if((e.f&ke)!==0){e.f^=ke,(e.f&_e)===0&&(ve(e,ye),mt.ensure().schedule(e));for(var r=e.first;r!==null;){var n=r.next,a=(r.f&Ht)!==0||(r.f&Ve)!==0;pi(r,a?t:!1),r=n}var i=e.nodes&&e.nodes.t;if(i!==null)for(const s of i)(s.is_global||t)&&s.in()}}function $n(e,t){if(e.nodes)for(var r=e.nodes.start,n=e.nodes.end;r!==null;){var a=r===n?null:vr(r);t.append(r),r=a}}let yr=!1,bt=!1;function Zn(e){bt=e}let G=null,ze=!1;function Ue(e){G=e}let Y=null;function We(e){Y=e}let qe=null;function gi(e){G!==null&&(qe===null?qe=[e]:qe.push(e))}let Se=null,Me=0,Pe=null;function so(e){Pe=e}let _i=1,St=0,Mt=St;function ea(e){Mt=e}function mi(){return++_i}function hr(e){var t=e.f;if((t&ye)!==0)return!0;if(t&Ee&&(e.f&=~Rt),(t&Qe)!==0){for(var r=e.deps,n=r.length,a=0;a<n;a++){var i=r[a];if(hr(i)&&ei(i),i.wv>e.wv)return!0}(t&Be)!==0&&$e===null&&ve(e,_e)}return!1}function yi(e,t,r=!0){var n=e.reactions;if(n!==null&&!(qe!==null&&jt.call(qe,e)))for(var a=0;a<n.length;a++){var i=n[a];(i.f&Ee)!==0?yi(i,t,!1):t===i&&(r?ve(i,ye):(i.f&_e)!==0&&ve(i,Qe),Nn(i))}}function bi(e){var t=Se,r=Me,n=Pe,a=G,i=qe,s=de,l=ze,o=Mt,c=e.f;Se=null,Me=0,Pe=null,G=(c&(Ve|_t))===0?e:null,qe=null,Kt(e.ctx),ze=!1,Mt=++St,e.ac!==null&&(Mr(()=>{e.ac.abort(at)}),e.ac=null);try{e.f|=br;var u=e.fn,h=u();e.f|=Lt;var v=e.deps,_=z?.is_fork;if(Se!==null){var k;if(_||lr(e,Me),v!==null&&Me>0)for(v.length=Me+Se.length,k=0;k<Se.length;k++)v[Me+k]=Se[k];else e.deps=v=Se;if(Bn()&&(e.f&Be)!==0)for(k=Me;k<v.length;k++)(v[k].reactions??=[]).push(e)}else!_&&v!==null&&Me<v.length&&(lr(e,Me),v.length=Me);if(fr()&&Pe!==null&&!ze&&v!==null&&(e.f&(Ee|Qe|ye))===0)for(k=0;k<Pe.length;k++)yi(Pe[k],e);if(a!==null&&a!==e){if(St++,a.deps!==null)for(let S=0;S<r;S+=1)a.deps[S].rv=St;if(t!==null)for(const S of t)S.rv=St;Pe!==null&&(n===null?n=Pe:n.push(...Pe))}return(e.f&ht)!==0&&(e.f^=ht),h}catch(S){return Ya(S)}finally{e.f^=br,Se=t,Me=r,Pe=n,G=a,qe=i,Kt(s),ze=l,Mt=o}}function oo(e,t){let r=t.reactions;if(r!==null){var n=ts.call(r,e);if(n!==-1){var a=r.length-1;a===0?r=t.reactions=null:(r[n]=r[a],r.pop())}}if(r===null&&(t.f&Ee)!==0&&(Se===null||!jt.call(Se,t))){var i=t;(i.f&Be)!==0&&(i.f^=Be,i.f&=~Rt),i.v!==me&&Mn(i),Ys(i),lr(i,0)}}function lr(e,t){var r=e.deps;if(r!==null)for(var n=t;n<r.length;n++)oo(e,r[n])}function Jt(e){var t=e.f;if((t&De)===0){ve(e,_e);var r=Y,n=yr;Y=e,yr=!0;try{(t&(Ge|Fa))!==0?io(e):Fn(e),di(e);var a=bi(e);e.teardown=typeof a=="function"?a:null,e.wv=_i;var i;es&&Ns&&(e.f&ye)!==0&&e.deps}finally{yr=n,Y=r}}}async function lo(){await Promise.resolve(),qs()}function f(e){var t=e.f,r=(t&Ee)!==0;if(G!==null&&!ze){var n=Y!==null&&(Y.f&De)!==0;if(!n&&(qe===null||!jt.call(qe,e))){var a=G.deps;if((G.f&br)!==0)e.rv<St&&(e.rv=St,Se===null&&a!==null&&a[Me]===e?Me++:Se===null?Se=[e]:Se.push(e));else{(G.deps??=[]).push(e);var i=e.reactions;i===null?e.reactions=[G]:jt.call(i,G)||i.push(G)}}}if(bt&&It.has(e))return It.get(e);if(r){var s=e;if(bt){var l=s.v;return((s.f&_e)===0&&s.reactions!==null||Ei(s))&&(l=Pn(s)),It.set(s,l),l}var o=(s.f&Be)===0&&!ze&&G!==null&&(yr||(G.f&Be)!==0),c=(s.f&Lt)===0;hr(s)&&(o&&(s.f|=Be),ei(s)),o&&!c&&(ti(s),wi(s))}if($e?.has(e))return $e.get(e);if((e.f&ht)!==0)throw e.v;return e.v}function wi(e){if(e.f|=Be,e.deps!==null)for(const t of e.deps)(t.reactions??=[]).push(e),(t.f&Ee)!==0&&(t.f&Be)===0&&(ti(t),wi(t))}function Ei(e){if(e.v===me)return!0;if(e.deps===null)return!1;for(const t of e.deps)if(It.has(t)||(t.f&Ee)!==0&&Ei(t))return!0;return!1}function Wt(e){var t=ze;try{return ze=!0,e()}finally{ze=t}}function co(e){if(!(typeof e!="object"||!e||e instanceof EventTarget)){if(At in e)vn(e);else if(!Array.isArray(e))for(let t in e){const r=e[t];typeof r=="object"&&r&&At in r&&vn(r)}}}function vn(e,t=new Set){if(typeof e=="object"&&e!==null&&!(e instanceof EventTarget)&&!t.has(e)){t.add(e),e instanceof Date&&e.getTime();for(let n in e)try{vn(e[n],t)}catch{}const r=xn(e);if(r!==Object.prototype&&r!==Array.prototype&&r!==Map.prototype&&r!==Set.prototype&&r!==Date.prototype){const n=qa(r);for(let a in n){const i=n[a].get;if(i)try{i.call(e)}catch{}}}}}const uo=["touchstart","touchmove"];function fo(e){return uo.includes(e)}const tr=Symbol("events"),ki=new Set,hn=new Set;function vo(e,t,r,n={}){function a(i){if(n.capture||pn.call(t,i),!i.cancelBubble)return Mr(()=>r?.call(this,i))}return e.startsWith("pointer")||e.startsWith("touch")||e==="wheel"?pt(()=>{t.addEventListener(e,a,n)}):t.addEventListener(e,a,n),a}function kr(e,t,r,n,a){var i={capture:n,passive:a},s=vo(e,t,r,i);(t===document.body||t===window||t===document||t instanceof HTMLMediaElement)&&Dn(()=>{t.removeEventListener(e,s,i)})}function se(e,t,r){(t[tr]??={})[e]=r}function ot(e){for(var t=0;t<e.length;t++)ki.add(e[t]);for(var r of hn)r(e)}let ta=null;function pn(e){var t=this,r=t.ownerDocument,n=e.type,a=e.composedPath?.()||[],i=a[0]||e.target;ta=e;var s=0,l=ta===e&&e[tr];if(l){var o=a.indexOf(l);if(o!==-1&&(t===document||t===window)){e[tr]=t;return}var c=a.indexOf(t);if(c===-1)return;o<=c&&(s=o)}if(i=a[s]||e.target,i!==t){rs(e,"currentTarget",{configurable:!0,get(){return i||r}});var u=G,h=Y;Ue(null),We(null);try{for(var v,_=[];i!==null;){var k=i.assignedSlot||i.parentNode||i.host||null;try{var S=i[tr]?.[n];S!=null&&(!i.disabled||e.target===i)&&S.call(i,e)}catch(w){v?_.push(w):v=w}if(e.cancelBubble||k===t||k===null)break;i=k}if(v){for(let w of _)queueMicrotask(()=>{throw w});throw v}}finally{e[tr]=t,delete e.currentTarget,Ue(u),We(h)}}}const ho=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:e=>e});function po(e){return ho?.createHTML(e)??e}function Ci(e){var t=li("template");return t.innerHTML=po(e.replaceAll("<!>","<!---->")),t.content}function Pt(e,t){var r=Y;r.nodes===null&&(r.nodes={start:e,end:t,a:null,t:null})}function D(e,t){var r=(t&Cs)!==0,n=(t&Ss)!==0,a,i=!e.startsWith("<!>");return()=>{a===void 0&&(a=Ci(i?e:"<!>"+e),r||(a=Je(a)));var s=n||ai?document.importNode(a,!0):a.cloneNode(!0);if(r){var l=Je(s),o=s.lastChild;Pt(l,o)}else Pt(s,s);return s}}function go(e,t,r="svg"){var n=!e.startsWith("<!>"),a=`<${r}>${n?e:"<!>"+e}</${r}>`,i;return()=>{if(!i){var s=Ci(a),l=Je(s);i=Je(l)}var o=i.cloneNode(!0);return Pt(o,o),o}}function Si(e,t){return go(e,t,"svg")}function _o(e=""){{var t=it(e+"");return Pt(t,t),t}}function pr(){var e=document.createDocumentFragment(),t=document.createComment(""),r=it();return e.append(t,r),Pt(t,r),e}function L(e,t){e!==null&&e.before(t)}function P(e,t){var r=t==null?"":typeof t=="object"?`${t}`:t;r!==(e.__t??=e.nodeValue)&&(e.__t=r,e.nodeValue=`${r}`)}function mo(e,t){return yo(e,t)}const gr=new Map;function yo(e,{target:t,anchor:r,props:n={},events:a,context:i,intro:s=!0,transformError:l}){Ws();var o=void 0,c=ro(()=>{var u=r??t.appendChild(it());$s(u,{pending:()=>{}},_=>{Ie({});var k=de;i&&(k.c=i),a&&(n.$$events=a),o=e(_,n)||{},xe()},l);var h=new Set,v=_=>{for(var k=0;k<_.length;k++){var S=_[k];if(!h.has(S)){h.add(S);var w=fo(S);for(const A of[t,document]){var m=gr.get(A);m===void 0&&(m=new Map,gr.set(A,m));var I=m.get(S);I===void 0?(A.addEventListener(S,pn,{passive:w}),m.set(S,1)):m.set(S,I+1)}}}};return v(Ir(ki)),hn.add(v),()=>{for(var _ of h)for(const w of[t,document]){var k=gr.get(w),S=k.get(_);--S==0?(w.removeEventListener(_,pn),k.delete(_),k.size===0&&gr.delete(w)):k.set(_,S)}hn.delete(v),u!==r&&u.parentNode?.removeChild(u)}});return bo.set(o,c),o}let bo=new WeakMap;class wo{anchor;#r=new Map;#l=new Map;#e=new Map;#a=new Set;#n=!0;constructor(t,r=!0){this.anchor=t,this.#n=r}#i=t=>{if(this.#r.has(t)){var r=this.#r.get(t),n=this.#l.get(r);if(n)On(n),this.#a.delete(r);else{var a=this.#e.get(r);a&&(this.#l.set(r,a.effect),this.#e.delete(r),a.fragment.lastChild.remove(),this.anchor.before(a.fragment),n=a.effect)}for(const[i,s]of this.#r){if(this.#r.delete(i),i===t)break;const l=this.#e.get(s);l&&(Ae(l.effect),this.#e.delete(s))}for(const[i,s]of this.#l){if(i===r||this.#a.has(i))continue;const l=()=>{if(Array.from(this.#r.values()).includes(i)){var c=document.createDocumentFragment();$n(s,c),c.append(it()),this.#e.set(i,{effect:s,fragment:c})}else Ae(s);this.#a.delete(i),this.#l.delete(i)};this.#n||!n?(this.#a.add(i),xt(s,l,!1)):l()}}};#t=t=>{this.#r.delete(t);const r=Array.from(this.#r.values());for(const[n,a]of this.#e)r.includes(n)||(Ae(a.effect),this.#e.delete(n))};ensure(t,r){var n=z,a=oi();if(r&&!this.#l.has(t)&&!this.#e.has(t))if(a){var i=document.createDocumentFragment(),s=it();i.append(s),this.#e.set(t,{effect:Le(()=>r(s)),fragment:i})}else this.#l.set(t,Le(()=>r(this.anchor)));if(this.#r.set(n,t),a){for(const[l,o]of this.#l)l===t?n.unskip_effect(o):n.skip_effect(o);for(const[l,o]of this.#e)l===t?n.unskip_effect(o.effect):n.skip_effect(o.effect);n.oncommit(this.#i),n.ondiscard(this.#t)}else this.#i(n)}}function J(e,t,r=!1){var n=new wo(e),a=r?Ht:0;function i(s,l){n.ensure(s,l)}Un(()=>{var s=!1;t((l,o=0)=>{s=!0,i(o,l)}),s||i(-1,null)},a)}function Eo(e,t,r){for(var n=[],a=t.length,i,s=t.length,l=0;l<a;l++){let h=t[l];xt(h,()=>{if(i){if(i.pending.delete(h),i.done.add(h),i.pending.size===0){var v=e.outrogroups;gn(e,Ir(i.done)),v.delete(i),v.size===0&&(e.outrogroups=null)}}else s-=1},!1)}if(s===0){var o=n.length===0&&r!==null;if(o){var c=r,u=c.parentNode;Xs(u),u.append(c),e.items.clear()}gn(e,t,!o)}else i={pending:new Set(t),done:new Set},(e.outrogroups??=new Set).add(i)}function gn(e,t,r=!0){var n;if(e.pending.size>0){n=new Set;for(const s of e.pending.values())for(const l of s)n.add(e.items.get(l).e)}for(var a=0;a<t.length;a++){var i=t[a];if(n?.has(i)){i.f|=Ke;const s=document.createDocumentFragment();$n(i,s)}else Ae(t[a],r)}}var ra;function st(e,t,r,n,a,i=null){var s=e,l=new Map,o=(t&za)!==0;if(o){var c=e;s=c.appendChild(it())}var u=null,h=Er(()=>{var A=r();return In(A)?A:A==null?[]:Ir(A)}),v,_=new Map,k=!0;function S(A){(I.effect.f&De)===0&&(I.pending.delete(A),I.fallback=u,ko(I,v,s,t,n),u!==null&&(v.length===0?(u.f&Ke)===0?On(u):(u.f^=Ke,rr(u,null,s)):xt(u,()=>{u=null})))}function w(A){I.pending.delete(A)}var m=Un(()=>{v=f(h);for(var A=v.length,R=new Set,U=z,y=oi(),x=0;x<A;x+=1){var N=v[x],b=n(N,x),T=k?null:l.get(b);T?(T.v&&Yt(T.v,N),T.i&&Yt(T.i,x),y&&U.unskip_effect(T.e)):(T=Co(l,k?s:ra??=it(),N,b,x,a,t,r),k||(T.e.f|=Ke),l.set(b,T)),R.add(b)}if(A===0&&i&&!u&&(k?u=Le(()=>i(s)):(u=Le(()=>i(ra??=it())),u.f|=Ke)),A>R.size&&ds(),!k)if(_.set(U,R),y){for(const[E,g]of l)R.has(E)||U.skip_effect(g.e);U.oncommit(S),U.ondiscard(w)}else S(U);f(h)}),I={effect:m,items:l,pending:_,outrogroups:null,fallback:u};k=!1}function Zt(e){for(;e!==null&&(e.f&Ve)===0;)e=e.next;return e}function ko(e,t,r,n,a){var i=(n&Es)!==0,s=t.length,l=e.items,o=Zt(e.effect.first),c,u=null,h,v=[],_=[],k,S,w,m;if(i)for(m=0;m<s;m+=1)k=t[m],S=a(k,m),w=l.get(S).e,(w.f&Ke)===0&&(w.nodes?.a?.measure(),(h??=new Set).add(w));for(m=0;m<s;m+=1){if(k=t[m],S=a(k,m),w=l.get(S).e,e.outrogroups!==null)for(const T of e.outrogroups)T.pending.delete(w),T.done.delete(w);if((w.f&ke)!==0&&(On(w),i&&(w.nodes?.a?.unfix(),(h??=new Set).delete(w))),(w.f&Ke)!==0)if(w.f^=Ke,w===o)rr(w,null,r);else{var I=u?u.next:o;w===e.effect.last&&(e.effect.last=w.prev),w.prev&&(w.prev.next=w.next),w.next&&(w.next.prev=w.prev),dt(e,u,w),dt(e,w,I),rr(w,I,r),u=w,v=[],_=[],o=Zt(u.next);continue}if(w!==o){if(c!==void 0&&c.has(w)){if(v.length<_.length){var A=_[0],R;u=A.prev;var U=v[0],y=v[v.length-1];for(R=0;R<v.length;R+=1)rr(v[R],A,r);for(R=0;R<_.length;R+=1)c.delete(_[R]);dt(e,U.prev,y.next),dt(e,u,U),dt(e,y,A),o=A,u=y,m-=1,v=[],_=[]}else c.delete(w),rr(w,o,r),dt(e,w.prev,w.next),dt(e,w,u===null?e.effect.first:u.next),dt(e,u,w),u=w;continue}for(v=[],_=[];o!==null&&o!==w;)(c??=new Set).add(o),_.push(o),o=Zt(o.next);if(o===null)continue}(w.f&Ke)===0&&v.push(w),u=w,o=Zt(w.next)}if(e.outrogroups!==null){for(const T of e.outrogroups)T.pending.size===0&&(gn(e,Ir(T.done)),e.outrogroups?.delete(T));e.outrogroups.size===0&&(e.outrogroups=null)}if(o!==null||c!==void 0){var x=[];if(c!==void 0)for(w of c)(w.f&ke)===0&&x.push(w);for(;o!==null;)(o.f&ke)===0&&o!==e.fallback&&x.push(o),o=Zt(o.next);var N=x.length;if(N>0){var b=(n&za)!==0&&s===0?r:null;if(i){for(m=0;m<N;m+=1)x[m].nodes?.a?.measure();for(m=0;m<N;m+=1)x[m].nodes?.a?.fix()}Eo(e,x,b)}}i&&pt(()=>{if(h!==void 0)for(w of h)w.nodes?.a?.apply()})}function Co(e,t,r,n,a,i,s,l){var o=(s&bs)!==0?(s&ks)===0?Js(r,!1,!1):Nt(r):null,c=(s&ws)!==0?Nt(a):null;return{v:o,i:c,e:Le(()=>(i(t,o??r,c??a,l),()=>{e.delete(n)}))}}function rr(e,t,r){if(e.nodes)for(var n=e.nodes.start,a=e.nodes.end,i=t&&(t.f&Ke)===0?t.nodes.start:r;n!==null;){var s=vr(n);if(i.before(n),n===a)return;n=s}}function dt(e,t,r){t===null?e.effect.first=r:t.next=r,r===null?e.effect.last=t:r.prev=t}function So(e,t,r=!1,n=!1,a=!1,i=!1){var s=e,l="";if(r)var o=e;F(()=>{var c=Y;if(l!==(l=t()??"")){if(r){c.nodes=null,o.innerHTML=l,l!==""&&Pt(Je(o),o.lastChild);return}if(c.nodes!==null&&(fi(c.nodes.start,c.nodes.end),c.nodes=null),l!==""){var u=n?Ts:a?As:void 0,h=li(n?"svg":a?"math":"template",u);h.innerHTML=l;var v=n||a?h:h.content;if(Pt(Je(v),v.lastChild),n||a)for(;Je(v);)s.before(Je(v));else s.before(v)}}})}function Ti(e){var t,r,n="";if(typeof e=="string"||typeof e=="number")n+=e;else if(typeof e=="object")if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(r=Ti(e[t]))&&(n&&(n+=" "),n+=r)}else for(r in e)e[r]&&(n&&(n+=" "),n+=r);return n}function To(){for(var e,t,r=0,n="",a=arguments.length;r<a;r++)(e=arguments[r])&&(t=Ti(e))&&(n&&(n+=" "),n+=t);return n}function Ao(e){return typeof e=="object"?To(e):e??""}const na=[...`
|
|
2
|
+
\r\f \v\uFEFF`];function Io(e,t,r){var n=e==null?"":""+e;if(t&&(n=n?n+" "+t:t),r){for(var a of Object.keys(r))if(r[a])n=n?n+" "+a:a;else if(n.length)for(var i=a.length,s=0;(s=n.indexOf(a,s))>=0;){var l=s+i;(s===0||na.includes(n[s-1]))&&(l===n.length||na.includes(n[l]))?n=(s===0?"":n.substring(0,s))+n.substring(l+1):s=l}}return n===""?null:n}function xo(e,t){return e==null?null:String(e)}function wt(e,t,r,n,a,i){var s=e.__className;if(s!==r||s===void 0){var l=Io(r,n,i);l==null?e.removeAttribute("class"):e.className=l,e.__className=r}else if(i&&a!==i)for(var o in i){var c=!!i[o];(a==null||c!==!!a[o])&&e.classList.toggle(o,c)}return i}function _n(e,t,r,n){var a=e.__style;if(a!==t){var i=xo(t);i==null?e.removeAttribute("style"):e.style.cssText=i,e.__style=t}return n}function Ai(e,t,r=!1){if(e.multiple){if(t==null)return;if(!In(t))return xs();for(var n of e.options)n.selected=t.includes(sr(n));return}for(n of e.options){var a=sr(n);if(Qs(a,t)){n.selected=!0;return}}(!r||t!==void 0)&&(e.selectedIndex=-1)}function Mo(e){var t=new MutationObserver(()=>{Ai(e,e.__value)});t.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),Dn(()=>{t.disconnect()})}function Ii(e,t,r=t){var n=new WeakSet,a=!0;Ln(e,"change",i=>{var s=i?"[selected]":":checked",l;if(e.multiple)l=[].map.call(e.querySelectorAll(s),sr);else{var o=e.querySelector(s)??e.querySelector("option:not([disabled])");l=o&&sr(o)}r(l),e.__value=l,z!==null&&n.add(z)}),no(()=>{var i=t();if(e===document.activeElement){var s=z;if(n.has(s))return}if(Ai(e,i,a),a&&i===void 0){var l=e.querySelector(":checked");l!==null&&(i=sr(l),r(i))}e.__value=i,a=!1}),Mo(e)}function sr(e){return"__value"in e?e.__value:e.value}const Ro=Symbol("is custom element"),No=Symbol("is html"),Po=cs?"progress":"PROGRESS";function xi(e,t){var r=Mi(e);r.value===(r.value=t??void 0)||e.value===t&&(t!==0||e.nodeName!==Po)||(e.value=t??"")}function he(e,t,r,n){var a=Mi(e);a[t]!==(a[t]=r)&&(t==="loading"&&(e[ls]=r),r==null?e.removeAttribute(t):typeof r!="string"&&Lo(e).includes(t)?e[t]=r:e.setAttribute(t,r))}function Mi(e){return e.__attributes??={[Ro]:e.nodeName.includes("-"),[No]:e.namespaceURI===ja}}var aa=new Map;function Lo(e){var t=e.getAttribute("is")||e.nodeName,r=aa.get(t);if(r)return r;aa.set(t,r=[]);for(var n,a=e,i=Element.prototype;i!==a;){n=qa(a);for(var s in n)n[s].set&&r.push(s);a=xn(a)}return r}function cr(e,t,r=t){var n=new WeakSet;Ln(e,"input",async a=>{var i=a?e.defaultValue:e.value;if(i=Br(e)?Dr(i):i,r(i),z!==null&&n.add(z),await lo(),i!==(i=t())){var s=e.selectionStart,l=e.selectionEnd,o=e.value.length;if(e.value=i??"",l!==null){var c=e.value.length;s===l&&l===o&&c>o?(e.selectionStart=c,e.selectionEnd=c):(e.selectionStart=s,e.selectionEnd=Math.min(l,c))}}}),Wt(t)==null&&e.value&&(r(Br(e)?Dr(e.value):e.value),z!==null&&n.add(z)),qn(()=>{var a=t();if(e===document.activeElement){var i=z;if(n.has(i))return}Br(e)&&a===Dr(e.value)||e.type==="date"&&!a&&!e.value||a!==e.value&&(e.value=a??"")})}function mn(e,t,r=t){Ln(e,"change",n=>{var a=n?e.defaultChecked:e.checked;r(a)}),Wt(t)==null&&r(e.checked),qn(()=>{var n=t();e.checked=!!n})}function Br(e){var t=e.type;return t==="number"||t==="range"}function Dr(e){return e===""?null:+e}function zn(e=!1){const t=de,r=t.l.u;if(!r)return;let n=()=>co(t.s);if(e){let a=0,i={};const s=xr(()=>{let l=!1;const o=t.s;for(const c in o)o[c]!==i[c]&&(i[c]=o[c],l=!0);return l&&a++,a});n=()=>f(s)}r.b.length&&to(()=>{ia(t,n),ln(r.b)}),yt(()=>{const a=Wt(()=>r.m.map(ss));return()=>{for(const i of a)typeof i=="function"&&i()}}),r.a.length&&yt(()=>{ia(t,n),ln(r.a)})}function ia(e,t){if(e.l.s)for(const r of e.l.s)f(r);t()}function gt(e,t,r,n){var a=n,i=!0,s=()=>(i&&(i=!1,a=n),a),l;l=e[t],l===void 0&&n!==void 0&&(l=s());var o;return o=()=>{var c=e[t];return c===void 0?s():(i=!0,c)},o}function lt(e){de===null&&$a(),dr&&de.l!==null?Do(de).m.push(e):yt(()=>{const t=Wt(e);if(typeof t=="function")return t})}function Bo(e){de===null&&$a(),lt(()=>()=>Wt(e))}function Do(e){var t=e.l;return t.u??={a:[],b:[],m:[]}}const qo="5";typeof window<"u"&&((window.__svelte??={}).v??=new Set).add(qo);Ps();class Te extends Error{code;status;constructor(t,r,n=0){super(r),this.name="ApiError",this.code=t,this.status=n}}async function Re(e,t={}){let r;try{r=await fetch(e,{...t,headers:{accept:"application/json",...t.body!==void 0&&t.body!==null?{"content-type":"application/json"}:{},...t.headers??{}}})}catch(s){throw new Te("network",s.message||"Network request failed",0)}const i=(r.headers.get("content-type")??"").includes("application/json")?await r.json().catch(()=>null):null;if(!r.ok){const s=i;throw s&&s.ok===!1&&s.error?new Te(s.error.code,s.error.message,r.status):new Te(`http_${r.status}`,r.statusText||"Request failed",r.status)}if(i&&typeof i=="object"){const s=i;if(s.ok===!1&&s.error)throw new Te(s.error.code,s.error.message,r.status);if(s.ok===!0&&"data"in s)return s.data}return i}function Rr(e,t){const r=t===void 0?{method:"POST"}:{method:"POST",body:JSON.stringify(t)};return Re(e,r)}function yn(e,t){const r=t===void 0?{method:"PUT"}:{method:"PUT",body:JSON.stringify(t)};return Re(e,r)}function bn(e){return Re(e,{method:"DELETE"})}const W=Ye({status:"loading",service:null,nodes:[],nodeStats:{},trustCircle:{members:[],pending:[]},strands:{list:[],controlConnections:0,loaded:!1,error:null},connectivity:null,update:null,settings:null,toasts:[]});function ct(){return W}const sa=6e3;let Uo=0;function ee(e,t){const r=`t${++Uo}`,n={id:r,kind:e,text:t,expiresAt:Date.now()+sa};W.toasts.push(n),setTimeout(()=>Ri(r),sa)}function Ri(e){W.toasts=W.toasts.filter(t=>t.id!==e)}function Bt(e,t){const r=t instanceof Te?t.code:"error",n=t instanceof Error?t.message:String(t);console.error(`[cadre-host-ui] ${e}:`,t),ee("error",`${e}: ${n} (${r})`)}function Fo(e,t,r){if(!e)return"loading";const n=e.directReachability,a=t.some(i=>i.status!=="running");return n==="unreachable"||n==="cgnat"||a||r?.lastError?"warn":"ok"}function Gt(){W.status=Fo(W.connectivity,W.nodes,W.update)}async function Ni(){try{const e=await Re("/api/status");W.service=e.service,W.connectivity=e.connectivity,W.nodes.length===0&&(W.nodes=e.nodes.map(t=>({id:t.id,dockerId:"",partyId:t.partyId,profile:t.profile,status:t.status,spawnedAt:"",workdir:"",ports:{health:0,metrics:0,p2p:0}}))),Gt()}catch(e){Bt("status",e),W.status="error"}}async function Pi(){try{const e=await Re("/api/nodes");W.nodes=e.nodes,Gt()}catch(e){Bt("nodes",e)}}async function qr(e){try{const t=await Re(`/api/nodes/${encodeURIComponent(e)}`);return W.nodes=W.nodes.map(r=>r.id===e?t.node:r),W.nodeStats={...W.nodeStats,[e]:t.stats},t}catch(t){return Bt(`node ${e}`,t),null}}async function zt(){try{const e=await Re("/auth/trust-circle");W.trustCircle=e}catch(e){Bt("trust-circle",e)}}async function wn(){try{const e=await Re("/api/strands");W.strands={list:e.strands,controlConnections:e.controlConnections,loaded:!0,error:null}}catch(e){Bt("strands",e),W.strands={...W.strands,error:e instanceof Error?e.message:String(e)}}}async function $t(){try{const e=await Re("/nat/status");W.connectivity=e,Gt()}catch(e){Bt("connectivity",e)}}async function Cr(){try{const e=await Re("/update");W.update=e,Gt()}catch{W.update=null}}async function En(){try{const e=await Re("/api/settings");W.settings=e}catch(e){Bt("settings",e)}}function Oo(e){let t;try{t=JSON.parse(e.data)}catch{return}switch(e.type){case"node-state-changed":{const r=t.nodeId,n=t.status;r&&n&&(W.nodes=W.nodes.map(a=>a.id===r?{...a,status:n}:a),Gt());break}case"trust-circle-changed":zt();break;case"strands-changed":wn();break;case"connectivity-changed":$t();break;case"update-available":{const r=t.version,n=t.releaseNotesUrl;r&&(W.update={...W.update??{version:1},available:{version:r,publishedAt:W.update?.available?.publishedAt??new Date().toISOString(),...n?{releaseNotesUrl:n}:{}}},Gt());break}}}const kn={name:"home",params:{}};function Li(e){const t=e.startsWith("#")?e.slice(1):e,r=t.startsWith("/")?t.slice(1):t;if(!r)return kn;const n=r.split("/").filter(Boolean);switch(n[0]){case"trust-circle":return{name:"trust-circle",params:{}};case"connectivity":return{name:"connectivity",params:{}};case"nodes":return n.length>=2&&n[1]?{name:"node-detail",params:{id:decodeURIComponent(n[1])}}:{name:"nodes",params:{}};case"settings":return{name:"settings",params:{}};case"strands":return{name:"strands",params:{}};default:return kn}}function Tt(e,t={}){switch(e){case"home":return"#/";case"trust-circle":return"#/trust-circle";case"connectivity":return"#/connectivity";case"nodes":return"#/nodes";case"node-detail":return`#/nodes/${encodeURIComponent(t.id??"")}`;case"settings":return"#/settings";case"strands":return"#/strands"}}const Bi=Ye({route:typeof window>"u"?kn:Li(window.location.hash)});let Sr=!1;function Cn(){Bi.route=Li(window.location.hash)}function $o(){return Bi}function zo(){Sr||typeof window>"u"||(Sr=!0,window.addEventListener("hashchange",Cn),Cn())}function jo(){!Sr||typeof window>"u"||(Sr=!1,window.removeEventListener("hashchange",Cn))}const Vo=["node-state-changed","trust-circle-changed","strands-changed","connectivity-changed","update-available"],Ho=[2e3,4e3,8e3,16e3,3e4];function Ko(e,t={}){const r=t.url??"/api/events",n=t.eventSourceCtor??(typeof EventSource<"u"?EventSource:void 0);if(!n)return{close(){}};const a=n,i=t.backoffSchedule??Ho;let s=!1,l=0,o,c;function u(v){const _=Math.min(v,i.length-1);return i[_]??i[i.length-1]}function h(){if(s)return;c=new a(r);const v=c;v.onopen=()=>{s||(l=0,t.onOpen?.())};for(const _ of Vo)v.addEventListener(_,k=>{e({type:_,data:k.data??""})});v.onerror=()=>{if(s)return;try{v.close()}catch{}const _=u(l);t.onError?.(l,_),l+=1,o=setTimeout(h,_)}}return h(),{close(){if(s=!0,o&&clearTimeout(o),c)try{c.close()}catch{}}}}const Di=1e3,Sn=60*Di,Tn=60*Sn,oa=24*Tn;function je(e,t=Date.now()){if(!e)return"—";const r=Date.parse(e);if(!Number.isFinite(r))return"—";const n=t-r;return n<0?"just now":n<Sn?`${Math.floor(n/Di)}s ago`:n<Tn?`${Math.floor(n/Sn)}m ago`:n<oa?`${Math.floor(n/Tn)}h ago`:`${Math.floor(n/oa)}d ago`}function Yo(e){if(e==null||!Number.isFinite(e))return"—";if(e<1024)return`${e} B`;const t=["KB","MB","GB","TB"];let r=e/1024,n=0;for(;r>=1024&&n<t.length-1;)r/=1024,n+=1;return`${r.toFixed(r<10?2:1)} ${t[n]}`}function Jo(e){if(e==null||!Number.isFinite(e)||e<0)return"—";const t=Math.floor(e/86400),r=Math.floor(e%86400/3600),n=Math.floor(e%3600/60);return t>0?`${t}d ${r}h`:r>0?`${r}h ${n}m`:`${n}m`}function Tr(e){return e?e.length<=12?e:`${e.slice(0,6)}…${e.slice(-4)}`:"—"}var Go=D('<span role="status"><span class="bulb svelte-1qa2kn2" aria-hidden="true"></span> <span> </span></span>');function qi(e,t){const r=gt(t,"size",3,14),n=ne(()=>{switch(t.status){case"ok":return"ok";case"warn":return"warn";case"error":return"err";default:return"muted"}}),a=ne(()=>t.label??i(t.status));function i(u){switch(u){case"ok":return"Healthy";case"warn":return"Attention needed";case"error":return"Error";default:return"Loading…"}}var s=Go(),l=d(s),o=p(l,2),c=d(o);F(()=>{wt(s,1,`dot dot-${f(n)??""}`,"svelte-1qa2kn2"),_n(l,`width: ${r()??""}px; height: ${r()??""}px;`),P(c,f(a))}),L(e,s)}var Qo=D('<span class="row svelte-lwwmgz"><span> </span> <span class="badge"> </span></span>');function Ui(e,t){const r=ne(()=>{switch(t.reachability){case"reachable":return"Reachable";case"unreachable":return"Unreachable";case"cgnat":return"Behind CGNAT";default:return"Unknown"}}),n=ne(()=>{switch(t.reachability){case"reachable":return"ok";case"unreachable":return"err";case"cgnat":return"warn";default:return"info"}}),a=ne(()=>{switch(t.portMode){case"auto-upnp":return"UPnP";case"auto-natpmp":return"NAT-PMP";case"manual":return"Manual";case"failed":return"Failed";case"disabled":return"Disabled";default:return t.portMode}});var i=Qo(),s=d(i),l=d(s),o=p(s,2),c=d(o);F(()=>{wt(s,1,`badge ${f(n)??""}`,"svelte-lwwmgz"),P(l,f(r)),P(c,f(a))}),L(e,i)}var Wo=D('<div class="banner info svelte-15mtls8"><div><strong>Update available</strong> <span class="muted"> </span></div> <a class="link svelte-15mtls8">View update</a></div>'),Xo=D('<a class="link svelte-15mtls8">Resolve →</a>'),Zo=D('<!> <dl class="kv svelte-15mtls8"><div class="svelte-15mtls8"><dt class="svelte-15mtls8">External IP</dt><dd class="svelte-15mtls8"> </dd></div> <div class="svelte-15mtls8"><dt class="svelte-15mtls8">External port</dt><dd class="svelte-15mtls8"> </dd></div> <div class="svelte-15mtls8"><dt class="svelte-15mtls8">Last tested</dt><dd class="svelte-15mtls8"> </dd></div></dl> <!>',1),el=D('<p class="muted">Loading connectivity…</p>'),tl=D('<p class="muted"> </p>'),rl=D('<section class="stack"><!> <div class="grid summary svelte-15mtls8"><div class="card"><h3>Overall</h3> <!> <dl class="kv svelte-15mtls8"><div class="svelte-15mtls8"><dt class="svelte-15mtls8">Service</dt><dd class="svelte-15mtls8"> </dd></div> <div class="svelte-15mtls8"><dt class="svelte-15mtls8">Version</dt><dd class="svelte-15mtls8"> </dd></div> <div class="svelte-15mtls8"><dt class="svelte-15mtls8">Uptime</dt><dd class="svelte-15mtls8"> </dd></div></dl></div> <div class="card"><h3>Connectivity</h3> <!></div> <div class="card"><h3>Trust circle</h3> <p class="big svelte-15mtls8"> <span class="muted svelte-15mtls8">members</span></p> <!> <a class="link svelte-15mtls8">Manage →</a></div> <div class="card"><h3>Nodes</h3> <p class="big svelte-15mtls8"> <span class="muted svelte-15mtls8"> </span></p> <a class="link svelte-15mtls8">Details →</a></div></div></section>');function nl(e,t){Ie(t,!0);const r=ct();lt(()=>{Ni(),Cr()});const n=ne(()=>r.update?.available?.version??null),a=ne(()=>r.trustCircle.members.length),i=ne(()=>r.trustCircle.pending.length),s=ne(()=>r.nodes.filter($=>$.status==="running").length);var l=rl(),o=d(l);{var c=$=>{var ue=Wo(),re=d(ue),ge=p(d(re),2),oe=d(ge),X=p(re,2);F(le=>{P(oe,`— version ${f(n)??""}`),he(X,"href",le)},[()=>Tt("settings")]),L($,ue)};J(o,$=>{f(n)&&$(c)})}var u=p(o,2),h=d(u),v=p(d(h),2);qi(v,{get status(){return r.status}});var _=p(v,2),k=d(_),S=p(d(k)),w=d(S),m=p(k,2),I=p(d(m)),A=d(I),R=p(m,2),U=p(d(R)),y=d(U),x=p(h,2),N=p(d(x),2);{var b=$=>{var ue=Zo(),re=be(ue);Ui(re,{get reachability(){return r.connectivity.directReachability},get portMode(){return r.connectivity.portMode}});var ge=p(re,2),oe=d(ge),X=p(d(oe)),le=d(X),Ne=p(oe,2),Ze=p(d(Ne)),ut=d(Ze),Fe=p(Ne,2),Et=p(d(Fe)),Oe=d(Et),q=p(ge,2);{var Z=ce=>{var pe=Xo();F(fe=>he(pe,"href",fe),[()=>Tt("connectivity")]),L(ce,pe)};J(q,ce=>{r.connectivity.directReachability!=="reachable"&&ce(Z)})}F(ce=>{P(le,r.connectivity.externalIp??"—"),P(ut,r.connectivity.externalPort),P(Oe,ce)},[()=>je(r.connectivity.lastTestedAt)]),L($,ue)},T=$=>{var ue=el();L($,ue)};J(N,$=>{r.connectivity?$(b):$(T,-1)})}var E=p(x,2),g=p(d(E),2),C=d(g),M=p(g,2);{var O=$=>{var ue=tl(),re=d(ue);F(()=>P(re,`${f(i)??""} pending invite${f(i)===1?"":"s"}`)),L($,ue)};J(M,$=>{f(i)>0&&$(O)})}var H=p(M,2),V=p(E,2),K=p(d(V),2),Q=d(K),te=p(Q),ae=d(te),ie=p(K,2);F(($,ue,re)=>{P(w,r.service?.name??"cadre-host"),P(A,r.service?.version??"—"),P(y,$),P(C,f(a)),he(H,"href",ue),P(Q,f(s)),P(ae,`/ ${r.nodes.length??""} running`),he(ie,"href",re)},[()=>Jo(r.service?.uptimeSeconds),()=>Tt("trust-circle"),()=>Tt("nodes")]),L(e,l),xe()}function al(e,t){const r=e.trim();return r?t.trim()===r:!1}var il=D('<p class="note svelte-80vbit"> </p>'),sl=D('<div class="gate svelte-80vbit"><label for="confirm-typed">Type <code> </code> to confirm:</label> <input id="confirm-typed" type="text" autocomplete="off" autocapitalize="off" spellcheck="false"/></div>'),ol=D('<div class="backdrop svelte-80vbit" role="presentation"></div> <div class="dialog svelte-80vbit" role="dialog" aria-modal="true" aria-labelledby="confirm-title" tabindex="-1"><h3 id="confirm-title"> </h3> <p class="muted"> </p> <!> <!> <div class="actions svelte-80vbit"><button> </button> <button> </button></div></div>',1);function Ar(e,t){Ie(t,!0);const r=gt(t,"confirmLabel",3,"Confirm"),n=gt(t,"cancelLabel",3,"Cancel"),a=gt(t,"danger",3,!1);let i=j(!1),s=j("");const l=ne(()=>typeof t.requireText=="string"&&t.requireText.trim()!==""),o=ne(()=>f(l)&&al(t.requireText??"",f(s))),c=ne(()=>!f(i)&&(!f(l)||f(o)));yt(()=>{t.open,t.requireText,B(s,"")});async function u(){if(f(c)){B(i,!0);try{await t.onConfirm()}finally{B(i,!1)}}}function h(w){w.key==="Escape"&&t.onCancel()}function v(w){w.key==="Enter"&&(w.preventDefault(),f(c)&&u())}var _=pr(),k=be(_);{var S=w=>{var m=ol(),I=be(m),A=p(I,2),R=d(A),U=d(R),y=p(R,2),x=d(y),N=p(y,2);{var b=V=>{var K=il(),Q=d(K);F(()=>P(Q,`⚠ ${t.note??""}`)),L(V,K)};J(N,V=>{t.note&&V(b)})}var T=p(N,2);{var E=V=>{var K=sl(),Q=d(K),te=p(d(Q)),ae=d(te),ie=p(Q,2);F(()=>{P(ae,t.requireText),ie.disabled=f(i)}),se("keydown",ie,v),cr(ie,()=>f(s),$=>B(s,$)),L(V,K)};J(T,V=>{f(l)&&V(E)})}var g=p(T,2),C=d(g),M=d(C),O=p(C,2),H=d(O);F(()=>{P(U,t.title),P(x,t.message),C.disabled=f(i),P(M,n()),wt(O,1,Ao(a()?"danger":"primary")),O.disabled=!f(c),P(H,f(i)?"Working…":r())}),se("click",I,function(...V){t.onCancel?.apply(this,V)}),se("keydown",A,h),se("click",C,function(...V){t.onCancel?.apply(this,V)}),se("click",O,u),L(w,m)};J(k,w=>{t.open&&w(S)})}L(e,_),xe()}ot(["click","keydown"]);function ll(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Ft={},Ur,la;function cl(){return la||(la=1,Ur=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then}),Ur}var Fr={},ft={},ca;function Dt(){if(ca)return ft;ca=1;let e;const t=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];return ft.getSymbolSize=function(n){if(!n)throw new Error('"version" cannot be null or undefined');if(n<1||n>40)throw new Error('"version" should be in range from 1 to 40');return n*4+17},ft.getSymbolTotalCodewords=function(n){return t[n]},ft.getBCHDigit=function(r){let n=0;for(;r!==0;)n++,r>>>=1;return n},ft.setToSJISFunction=function(n){if(typeof n!="function")throw new Error('"toSJISFunc" is not a valid function.');e=n},ft.isKanjiModeEnabled=function(){return typeof e<"u"},ft.toSJIS=function(n){return e(n)},ft}var Or={},ua;function jn(){return ua||(ua=1,(function(e){e.L={bit:1},e.M={bit:0},e.Q={bit:3},e.H={bit:2};function t(r){if(typeof r!="string")throw new Error("Param is not a string");switch(r.toLowerCase()){case"l":case"low":return e.L;case"m":case"medium":return e.M;case"q":case"quartile":return e.Q;case"h":case"high":return e.H;default:throw new Error("Unknown EC Level: "+r)}}e.isValid=function(n){return n&&typeof n.bit<"u"&&n.bit>=0&&n.bit<4},e.from=function(n,a){if(e.isValid(n))return n;try{return t(n)}catch{return a}}})(Or)),Or}var $r,da;function ul(){if(da)return $r;da=1;function e(){this.buffer=[],this.length=0}return e.prototype={get:function(t){const r=Math.floor(t/8);return(this.buffer[r]>>>7-t%8&1)===1},put:function(t,r){for(let n=0;n<r;n++)this.putBit((t>>>r-n-1&1)===1)},getLengthInBits:function(){return this.length},putBit:function(t){const r=Math.floor(this.length/8);this.buffer.length<=r&&this.buffer.push(0),t&&(this.buffer[r]|=128>>>this.length%8),this.length++}},$r=e,$r}var zr,fa;function dl(){if(fa)return zr;fa=1;function e(t){if(!t||t<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=t,this.data=new Uint8Array(t*t),this.reservedBit=new Uint8Array(t*t)}return e.prototype.set=function(t,r,n,a){const i=t*this.size+r;this.data[i]=n,a&&(this.reservedBit[i]=!0)},e.prototype.get=function(t,r){return this.data[t*this.size+r]},e.prototype.xor=function(t,r,n){this.data[t*this.size+r]^=n},e.prototype.isReserved=function(t,r){return this.reservedBit[t*this.size+r]},zr=e,zr}var jr={},va;function fl(){return va||(va=1,(function(e){const t=Dt().getSymbolSize;e.getRowColCoords=function(n){if(n===1)return[];const a=Math.floor(n/7)+2,i=t(n),s=i===145?26:Math.ceil((i-13)/(2*a-2))*2,l=[i-7];for(let o=1;o<a-1;o++)l[o]=l[o-1]-s;return l.push(6),l.reverse()},e.getPositions=function(n){const a=[],i=e.getRowColCoords(n),s=i.length;for(let l=0;l<s;l++)for(let o=0;o<s;o++)l===0&&o===0||l===0&&o===s-1||l===s-1&&o===0||a.push([i[l],i[o]]);return a}})(jr)),jr}var Vr={},ha;function vl(){if(ha)return Vr;ha=1;const e=Dt().getSymbolSize,t=7;return Vr.getPositions=function(n){const a=e(n);return[[0,0],[a-t,0],[0,a-t]]},Vr}var Hr={},pa;function hl(){return pa||(pa=1,(function(e){e.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};const t={N1:3,N2:3,N3:40,N4:10};e.isValid=function(a){return a!=null&&a!==""&&!isNaN(a)&&a>=0&&a<=7},e.from=function(a){return e.isValid(a)?parseInt(a,10):void 0},e.getPenaltyN1=function(a){const i=a.size;let s=0,l=0,o=0,c=null,u=null;for(let h=0;h<i;h++){l=o=0,c=u=null;for(let v=0;v<i;v++){let _=a.get(h,v);_===c?l++:(l>=5&&(s+=t.N1+(l-5)),c=_,l=1),_=a.get(v,h),_===u?o++:(o>=5&&(s+=t.N1+(o-5)),u=_,o=1)}l>=5&&(s+=t.N1+(l-5)),o>=5&&(s+=t.N1+(o-5))}return s},e.getPenaltyN2=function(a){const i=a.size;let s=0;for(let l=0;l<i-1;l++)for(let o=0;o<i-1;o++){const c=a.get(l,o)+a.get(l,o+1)+a.get(l+1,o)+a.get(l+1,o+1);(c===4||c===0)&&s++}return s*t.N2},e.getPenaltyN3=function(a){const i=a.size;let s=0,l=0,o=0;for(let c=0;c<i;c++){l=o=0;for(let u=0;u<i;u++)l=l<<1&2047|a.get(c,u),u>=10&&(l===1488||l===93)&&s++,o=o<<1&2047|a.get(u,c),u>=10&&(o===1488||o===93)&&s++}return s*t.N3},e.getPenaltyN4=function(a){let i=0;const s=a.data.length;for(let o=0;o<s;o++)i+=a.data[o];return Math.abs(Math.ceil(i*100/s/5)-10)*t.N4};function r(n,a,i){switch(n){case e.Patterns.PATTERN000:return(a+i)%2===0;case e.Patterns.PATTERN001:return a%2===0;case e.Patterns.PATTERN010:return i%3===0;case e.Patterns.PATTERN011:return(a+i)%3===0;case e.Patterns.PATTERN100:return(Math.floor(a/2)+Math.floor(i/3))%2===0;case e.Patterns.PATTERN101:return a*i%2+a*i%3===0;case e.Patterns.PATTERN110:return(a*i%2+a*i%3)%2===0;case e.Patterns.PATTERN111:return(a*i%3+(a+i)%2)%2===0;default:throw new Error("bad maskPattern:"+n)}}e.applyMask=function(a,i){const s=i.size;for(let l=0;l<s;l++)for(let o=0;o<s;o++)i.isReserved(o,l)||i.xor(o,l,r(a,o,l))},e.getBestMask=function(a,i){const s=Object.keys(e.Patterns).length;let l=0,o=1/0;for(let c=0;c<s;c++){i(c),e.applyMask(c,a);const u=e.getPenaltyN1(a)+e.getPenaltyN2(a)+e.getPenaltyN3(a)+e.getPenaltyN4(a);e.applyMask(c,a),u<o&&(o=u,l=c)}return l}})(Hr)),Hr}var _r={},ga;function Fi(){if(ga)return _r;ga=1;const e=jn(),t=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],r=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];return _r.getBlocksCount=function(a,i){switch(i){case e.L:return t[(a-1)*4+0];case e.M:return t[(a-1)*4+1];case e.Q:return t[(a-1)*4+2];case e.H:return t[(a-1)*4+3];default:return}},_r.getTotalCodewordsCount=function(a,i){switch(i){case e.L:return r[(a-1)*4+0];case e.M:return r[(a-1)*4+1];case e.Q:return r[(a-1)*4+2];case e.H:return r[(a-1)*4+3];default:return}},_r}var Kr={},er={},_a;function pl(){if(_a)return er;_a=1;const e=new Uint8Array(512),t=new Uint8Array(256);return(function(){let n=1;for(let a=0;a<255;a++)e[a]=n,t[n]=a,n<<=1,n&256&&(n^=285);for(let a=255;a<512;a++)e[a]=e[a-255]})(),er.log=function(n){if(n<1)throw new Error("log("+n+")");return t[n]},er.exp=function(n){return e[n]},er.mul=function(n,a){return n===0||a===0?0:e[t[n]+t[a]]},er}var ma;function gl(){return ma||(ma=1,(function(e){const t=pl();e.mul=function(n,a){const i=new Uint8Array(n.length+a.length-1);for(let s=0;s<n.length;s++)for(let l=0;l<a.length;l++)i[s+l]^=t.mul(n[s],a[l]);return i},e.mod=function(n,a){let i=new Uint8Array(n);for(;i.length-a.length>=0;){const s=i[0];for(let o=0;o<a.length;o++)i[o]^=t.mul(a[o],s);let l=0;for(;l<i.length&&i[l]===0;)l++;i=i.slice(l)}return i},e.generateECPolynomial=function(n){let a=new Uint8Array([1]);for(let i=0;i<n;i++)a=e.mul(a,new Uint8Array([1,t.exp(i)]));return a}})(Kr)),Kr}var Yr,ya;function _l(){if(ya)return Yr;ya=1;const e=gl();function t(r){this.genPoly=void 0,this.degree=r,this.degree&&this.initialize(this.degree)}return t.prototype.initialize=function(n){this.degree=n,this.genPoly=e.generateECPolynomial(this.degree)},t.prototype.encode=function(n){if(!this.genPoly)throw new Error("Encoder not initialized");const a=new Uint8Array(n.length+this.degree);a.set(n);const i=e.mod(a,this.genPoly),s=this.degree-i.length;if(s>0){const l=new Uint8Array(this.degree);return l.set(i,s),l}return i},Yr=t,Yr}var Jr={},Gr={},Qr={},ba;function Oi(){return ba||(ba=1,Qr.isValid=function(t){return!isNaN(t)&&t>=1&&t<=40}),Qr}var He={},wa;function $i(){if(wa)return He;wa=1;const e="[0-9]+",t="[A-Z $%*+\\-./:]+";let r="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";r=r.replace(/u/g,"\\u");const n="(?:(?![A-Z0-9 $%*+\\-./:]|"+r+`)(?:.|[\r
|
|
3
|
+
]))+`;He.KANJI=new RegExp(r,"g"),He.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g"),He.BYTE=new RegExp(n,"g"),He.NUMERIC=new RegExp(e,"g"),He.ALPHANUMERIC=new RegExp(t,"g");const a=new RegExp("^"+r+"$"),i=new RegExp("^"+e+"$"),s=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");return He.testKanji=function(o){return a.test(o)},He.testNumeric=function(o){return i.test(o)},He.testAlphanumeric=function(o){return s.test(o)},He}var Ea;function qt(){return Ea||(Ea=1,(function(e){const t=Oi(),r=$i();e.NUMERIC={id:"Numeric",bit:1,ccBits:[10,12,14]},e.ALPHANUMERIC={id:"Alphanumeric",bit:2,ccBits:[9,11,13]},e.BYTE={id:"Byte",bit:4,ccBits:[8,16,16]},e.KANJI={id:"Kanji",bit:8,ccBits:[8,10,12]},e.MIXED={bit:-1},e.getCharCountIndicator=function(i,s){if(!i.ccBits)throw new Error("Invalid mode: "+i);if(!t.isValid(s))throw new Error("Invalid version: "+s);return s>=1&&s<10?i.ccBits[0]:s<27?i.ccBits[1]:i.ccBits[2]},e.getBestModeForData=function(i){return r.testNumeric(i)?e.NUMERIC:r.testAlphanumeric(i)?e.ALPHANUMERIC:r.testKanji(i)?e.KANJI:e.BYTE},e.toString=function(i){if(i&&i.id)return i.id;throw new Error("Invalid mode")},e.isValid=function(i){return i&&i.bit&&i.ccBits};function n(a){if(typeof a!="string")throw new Error("Param is not a string");switch(a.toLowerCase()){case"numeric":return e.NUMERIC;case"alphanumeric":return e.ALPHANUMERIC;case"kanji":return e.KANJI;case"byte":return e.BYTE;default:throw new Error("Unknown mode: "+a)}}e.from=function(i,s){if(e.isValid(i))return i;try{return n(i)}catch{return s}}})(Gr)),Gr}var ka;function ml(){return ka||(ka=1,(function(e){const t=Dt(),r=Fi(),n=jn(),a=qt(),i=Oi(),s=7973,l=t.getBCHDigit(s);function o(v,_,k){for(let S=1;S<=40;S++)if(_<=e.getCapacity(S,k,v))return S}function c(v,_){return a.getCharCountIndicator(v,_)+4}function u(v,_){let k=0;return v.forEach(function(S){const w=c(S.mode,_);k+=w+S.getBitsLength()}),k}function h(v,_){for(let k=1;k<=40;k++)if(u(v,k)<=e.getCapacity(k,_,a.MIXED))return k}e.from=function(_,k){return i.isValid(_)?parseInt(_,10):k},e.getCapacity=function(_,k,S){if(!i.isValid(_))throw new Error("Invalid QR Code version");typeof S>"u"&&(S=a.BYTE);const w=t.getSymbolTotalCodewords(_),m=r.getTotalCodewordsCount(_,k),I=(w-m)*8;if(S===a.MIXED)return I;const A=I-c(S,_);switch(S){case a.NUMERIC:return Math.floor(A/10*3);case a.ALPHANUMERIC:return Math.floor(A/11*2);case a.KANJI:return Math.floor(A/13);case a.BYTE:default:return Math.floor(A/8)}},e.getBestVersionForData=function(_,k){let S;const w=n.from(k,n.M);if(Array.isArray(_)){if(_.length>1)return h(_,w);if(_.length===0)return 1;S=_[0]}else S=_;return o(S.mode,S.getLength(),w)},e.getEncodedBits=function(_){if(!i.isValid(_)||_<7)throw new Error("Invalid QR Code version");let k=_<<12;for(;t.getBCHDigit(k)-l>=0;)k^=s<<t.getBCHDigit(k)-l;return _<<12|k}})(Jr)),Jr}var Wr={},Ca;function yl(){if(Ca)return Wr;Ca=1;const e=Dt(),t=1335,r=21522,n=e.getBCHDigit(t);return Wr.getEncodedBits=function(i,s){const l=i.bit<<3|s;let o=l<<10;for(;e.getBCHDigit(o)-n>=0;)o^=t<<e.getBCHDigit(o)-n;return(l<<10|o)^r},Wr}var Xr={},Zr,Sa;function bl(){if(Sa)return Zr;Sa=1;const e=qt();function t(r){this.mode=e.NUMERIC,this.data=r.toString()}return t.getBitsLength=function(n){return 10*Math.floor(n/3)+(n%3?n%3*3+1:0)},t.prototype.getLength=function(){return this.data.length},t.prototype.getBitsLength=function(){return t.getBitsLength(this.data.length)},t.prototype.write=function(n){let a,i,s;for(a=0;a+3<=this.data.length;a+=3)i=this.data.substr(a,3),s=parseInt(i,10),n.put(s,10);const l=this.data.length-a;l>0&&(i=this.data.substr(a),s=parseInt(i,10),n.put(s,l*3+1))},Zr=t,Zr}var en,Ta;function wl(){if(Ta)return en;Ta=1;const e=qt(),t=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":"];function r(n){this.mode=e.ALPHANUMERIC,this.data=n}return r.getBitsLength=function(a){return 11*Math.floor(a/2)+6*(a%2)},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(a){let i;for(i=0;i+2<=this.data.length;i+=2){let s=t.indexOf(this.data[i])*45;s+=t.indexOf(this.data[i+1]),a.put(s,11)}this.data.length%2&&a.put(t.indexOf(this.data[i]),6)},en=r,en}var tn,Aa;function El(){if(Aa)return tn;Aa=1;const e=qt();function t(r){this.mode=e.BYTE,typeof r=="string"?this.data=new TextEncoder().encode(r):this.data=new Uint8Array(r)}return t.getBitsLength=function(n){return n*8},t.prototype.getLength=function(){return this.data.length},t.prototype.getBitsLength=function(){return t.getBitsLength(this.data.length)},t.prototype.write=function(r){for(let n=0,a=this.data.length;n<a;n++)r.put(this.data[n],8)},tn=t,tn}var rn,Ia;function kl(){if(Ia)return rn;Ia=1;const e=qt(),t=Dt();function r(n){this.mode=e.KANJI,this.data=n}return r.getBitsLength=function(a){return a*13},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(n){let a;for(a=0;a<this.data.length;a++){let i=t.toSJIS(this.data[a]);if(i>=33088&&i<=40956)i-=33088;else if(i>=57408&&i<=60351)i-=49472;else throw new Error("Invalid SJIS character: "+this.data[a]+`
|
|
4
|
+
Make sure your charset is UTF-8`);i=(i>>>8&255)*192+(i&255),n.put(i,13)}},rn=r,rn}var nn={exports:{}},xa;function Cl(){return xa||(xa=1,(function(e){var t={single_source_shortest_paths:function(r,n,a){var i={},s={};s[n]=0;var l=t.PriorityQueue.make();l.push(n,0);for(var o,c,u,h,v,_,k,S,w;!l.empty();){o=l.pop(),c=o.value,h=o.cost,v=r[c]||{};for(u in v)v.hasOwnProperty(u)&&(_=v[u],k=h+_,S=s[u],w=typeof s[u]>"u",(w||S>k)&&(s[u]=k,l.push(u,k),i[u]=c))}if(typeof a<"u"&&typeof s[a]>"u"){var m=["Could not find a path from ",n," to ",a,"."].join("");throw new Error(m)}return i},extract_shortest_path_from_predecessor_list:function(r,n){for(var a=[],i=n;i;)a.push(i),r[i],i=r[i];return a.reverse(),a},find_path:function(r,n,a){var i=t.single_source_shortest_paths(r,n,a);return t.extract_shortest_path_from_predecessor_list(i,a)},PriorityQueue:{make:function(r){var n=t.PriorityQueue,a={},i;r=r||{};for(i in n)n.hasOwnProperty(i)&&(a[i]=n[i]);return a.queue=[],a.sorter=r.sorter||n.default_sorter,a},default_sorter:function(r,n){return r.cost-n.cost},push:function(r,n){var a={value:r,cost:n};this.queue.push(a),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};e.exports=t})(nn)),nn.exports}var Ma;function Sl(){return Ma||(Ma=1,(function(e){const t=qt(),r=bl(),n=wl(),a=El(),i=kl(),s=$i(),l=Dt(),o=Cl();function c(m){return unescape(encodeURIComponent(m)).length}function u(m,I,A){const R=[];let U;for(;(U=m.exec(A))!==null;)R.push({data:U[0],index:U.index,mode:I,length:U[0].length});return R}function h(m){const I=u(s.NUMERIC,t.NUMERIC,m),A=u(s.ALPHANUMERIC,t.ALPHANUMERIC,m);let R,U;return l.isKanjiModeEnabled()?(R=u(s.BYTE,t.BYTE,m),U=u(s.KANJI,t.KANJI,m)):(R=u(s.BYTE_KANJI,t.BYTE,m),U=[]),I.concat(A,R,U).sort(function(x,N){return x.index-N.index}).map(function(x){return{data:x.data,mode:x.mode,length:x.length}})}function v(m,I){switch(I){case t.NUMERIC:return r.getBitsLength(m);case t.ALPHANUMERIC:return n.getBitsLength(m);case t.KANJI:return i.getBitsLength(m);case t.BYTE:return a.getBitsLength(m)}}function _(m){return m.reduce(function(I,A){const R=I.length-1>=0?I[I.length-1]:null;return R&&R.mode===A.mode?(I[I.length-1].data+=A.data,I):(I.push(A),I)},[])}function k(m){const I=[];for(let A=0;A<m.length;A++){const R=m[A];switch(R.mode){case t.NUMERIC:I.push([R,{data:R.data,mode:t.ALPHANUMERIC,length:R.length},{data:R.data,mode:t.BYTE,length:R.length}]);break;case t.ALPHANUMERIC:I.push([R,{data:R.data,mode:t.BYTE,length:R.length}]);break;case t.KANJI:I.push([R,{data:R.data,mode:t.BYTE,length:c(R.data)}]);break;case t.BYTE:I.push([{data:R.data,mode:t.BYTE,length:c(R.data)}])}}return I}function S(m,I){const A={},R={start:{}};let U=["start"];for(let y=0;y<m.length;y++){const x=m[y],N=[];for(let b=0;b<x.length;b++){const T=x[b],E=""+y+b;N.push(E),A[E]={node:T,lastCount:0},R[E]={};for(let g=0;g<U.length;g++){const C=U[g];A[C]&&A[C].node.mode===T.mode?(R[C][E]=v(A[C].lastCount+T.length,T.mode)-v(A[C].lastCount,T.mode),A[C].lastCount+=T.length):(A[C]&&(A[C].lastCount=T.length),R[C][E]=v(T.length,T.mode)+4+t.getCharCountIndicator(T.mode,I))}}U=N}for(let y=0;y<U.length;y++)R[U[y]].end=0;return{map:R,table:A}}function w(m,I){let A;const R=t.getBestModeForData(m);if(A=t.from(I,R),A!==t.BYTE&&A.bit<R.bit)throw new Error('"'+m+'" cannot be encoded with mode '+t.toString(A)+`.
|
|
5
|
+
Suggested mode is: `+t.toString(R));switch(A===t.KANJI&&!l.isKanjiModeEnabled()&&(A=t.BYTE),A){case t.NUMERIC:return new r(m);case t.ALPHANUMERIC:return new n(m);case t.KANJI:return new i(m);case t.BYTE:return new a(m)}}e.fromArray=function(I){return I.reduce(function(A,R){return typeof R=="string"?A.push(w(R,null)):R.data&&A.push(w(R.data,R.mode)),A},[])},e.fromString=function(I,A){const R=h(I,l.isKanjiModeEnabled()),U=k(R),y=S(U,A),x=o.find_path(y.map,"start","end"),N=[];for(let b=1;b<x.length-1;b++)N.push(y.table[x[b]].node);return e.fromArray(_(N))},e.rawSplit=function(I){return e.fromArray(h(I,l.isKanjiModeEnabled()))}})(Xr)),Xr}var Ra;function Tl(){if(Ra)return Fr;Ra=1;const e=Dt(),t=jn(),r=ul(),n=dl(),a=fl(),i=vl(),s=hl(),l=Fi(),o=_l(),c=ml(),u=yl(),h=qt(),v=Sl();function _(y,x){const N=y.size,b=i.getPositions(x);for(let T=0;T<b.length;T++){const E=b[T][0],g=b[T][1];for(let C=-1;C<=7;C++)if(!(E+C<=-1||N<=E+C))for(let M=-1;M<=7;M++)g+M<=-1||N<=g+M||(C>=0&&C<=6&&(M===0||M===6)||M>=0&&M<=6&&(C===0||C===6)||C>=2&&C<=4&&M>=2&&M<=4?y.set(E+C,g+M,!0,!0):y.set(E+C,g+M,!1,!0))}}function k(y){const x=y.size;for(let N=8;N<x-8;N++){const b=N%2===0;y.set(N,6,b,!0),y.set(6,N,b,!0)}}function S(y,x){const N=a.getPositions(x);for(let b=0;b<N.length;b++){const T=N[b][0],E=N[b][1];for(let g=-2;g<=2;g++)for(let C=-2;C<=2;C++)g===-2||g===2||C===-2||C===2||g===0&&C===0?y.set(T+g,E+C,!0,!0):y.set(T+g,E+C,!1,!0)}}function w(y,x){const N=y.size,b=c.getEncodedBits(x);let T,E,g;for(let C=0;C<18;C++)T=Math.floor(C/3),E=C%3+N-8-3,g=(b>>C&1)===1,y.set(T,E,g,!0),y.set(E,T,g,!0)}function m(y,x,N){const b=y.size,T=u.getEncodedBits(x,N);let E,g;for(E=0;E<15;E++)g=(T>>E&1)===1,E<6?y.set(E,8,g,!0):E<8?y.set(E+1,8,g,!0):y.set(b-15+E,8,g,!0),E<8?y.set(8,b-E-1,g,!0):E<9?y.set(8,15-E-1+1,g,!0):y.set(8,15-E-1,g,!0);y.set(b-8,8,1,!0)}function I(y,x){const N=y.size;let b=-1,T=N-1,E=7,g=0;for(let C=N-1;C>0;C-=2)for(C===6&&C--;;){for(let M=0;M<2;M++)if(!y.isReserved(T,C-M)){let O=!1;g<x.length&&(O=(x[g]>>>E&1)===1),y.set(T,C-M,O),E--,E===-1&&(g++,E=7)}if(T+=b,T<0||N<=T){T-=b,b=-b;break}}}function A(y,x,N){const b=new r;N.forEach(function(M){b.put(M.mode.bit,4),b.put(M.getLength(),h.getCharCountIndicator(M.mode,y)),M.write(b)});const T=e.getSymbolTotalCodewords(y),E=l.getTotalCodewordsCount(y,x),g=(T-E)*8;for(b.getLengthInBits()+4<=g&&b.put(0,4);b.getLengthInBits()%8!==0;)b.putBit(0);const C=(g-b.getLengthInBits())/8;for(let M=0;M<C;M++)b.put(M%2?17:236,8);return R(b,y,x)}function R(y,x,N){const b=e.getSymbolTotalCodewords(x),T=l.getTotalCodewordsCount(x,N),E=b-T,g=l.getBlocksCount(x,N),C=b%g,M=g-C,O=Math.floor(b/g),H=Math.floor(E/g),V=H+1,K=O-H,Q=new o(K);let te=0;const ae=new Array(g),ie=new Array(g);let $=0;const ue=new Uint8Array(y.buffer);for(let le=0;le<g;le++){const Ne=le<M?H:V;ae[le]=ue.slice(te,te+Ne),ie[le]=Q.encode(ae[le]),te+=Ne,$=Math.max($,Ne)}const re=new Uint8Array(b);let ge=0,oe,X;for(oe=0;oe<$;oe++)for(X=0;X<g;X++)oe<ae[X].length&&(re[ge++]=ae[X][oe]);for(oe=0;oe<K;oe++)for(X=0;X<g;X++)re[ge++]=ie[X][oe];return re}function U(y,x,N,b){let T;if(Array.isArray(y))T=v.fromArray(y);else if(typeof y=="string"){let O=x;if(!O){const H=v.rawSplit(y);O=c.getBestVersionForData(H,N)}T=v.fromString(y,O||40)}else throw new Error("Invalid data");const E=c.getBestVersionForData(T,N);if(!E)throw new Error("The amount of data is too big to be stored in a QR Code");if(!x)x=E;else if(x<E)throw new Error(`
|
|
6
|
+
The chosen QR Code version cannot contain this amount of data.
|
|
7
|
+
Minimum version required to store current data is: `+E+`.
|
|
8
|
+
`);const g=A(x,N,T),C=e.getSymbolSize(x),M=new n(C);return _(M,x),k(M),S(M,x),m(M,N,0),x>=7&&w(M,x),I(M,g),isNaN(b)&&(b=s.getBestMask(M,m.bind(null,M,N))),s.applyMask(b,M),m(M,N,b),{modules:M,version:x,errorCorrectionLevel:N,maskPattern:b,segments:T}}return Fr.create=function(x,N){if(typeof x>"u"||x==="")throw new Error("No input text");let b=t.M,T,E;return typeof N<"u"&&(b=t.from(N.errorCorrectionLevel,t.M),T=c.from(N.version),E=s.from(N.maskPattern),N.toSJISFunc&&e.setToSJISFunction(N.toSJISFunc)),U(x,T,b,E)},Fr}var an={},sn={},Na;function zi(){return Na||(Na=1,(function(e){function t(r){if(typeof r=="number"&&(r=r.toString()),typeof r!="string")throw new Error("Color should be defined as hex string");let n=r.slice().replace("#","").split("");if(n.length<3||n.length===5||n.length>8)throw new Error("Invalid hex color: "+r);(n.length===3||n.length===4)&&(n=Array.prototype.concat.apply([],n.map(function(i){return[i,i]}))),n.length===6&&n.push("F","F");const a=parseInt(n.join(""),16);return{r:a>>24&255,g:a>>16&255,b:a>>8&255,a:a&255,hex:"#"+n.slice(0,6).join("")}}e.getOptions=function(n){n||(n={}),n.color||(n.color={});const a=typeof n.margin>"u"||n.margin===null||n.margin<0?4:n.margin,i=n.width&&n.width>=21?n.width:void 0,s=n.scale||4;return{width:i,scale:i?4:s,margin:a,color:{dark:t(n.color.dark||"#000000ff"),light:t(n.color.light||"#ffffffff")},type:n.type,rendererOpts:n.rendererOpts||{}}},e.getScale=function(n,a){return a.width&&a.width>=n+a.margin*2?a.width/(n+a.margin*2):a.scale},e.getImageWidth=function(n,a){const i=e.getScale(n,a);return Math.floor((n+a.margin*2)*i)},e.qrToImageData=function(n,a,i){const s=a.modules.size,l=a.modules.data,o=e.getScale(s,i),c=Math.floor((s+i.margin*2)*o),u=i.margin*o,h=[i.color.light,i.color.dark];for(let v=0;v<c;v++)for(let _=0;_<c;_++){let k=(v*c+_)*4,S=i.color.light;if(v>=u&&_>=u&&v<c-u&&_<c-u){const w=Math.floor((v-u)/o),m=Math.floor((_-u)/o);S=h[l[w*s+m]?1:0]}n[k++]=S.r,n[k++]=S.g,n[k++]=S.b,n[k]=S.a}}})(sn)),sn}var Pa;function Al(){return Pa||(Pa=1,(function(e){const t=zi();function r(a,i,s){a.clearRect(0,0,i.width,i.height),i.style||(i.style={}),i.height=s,i.width=s,i.style.height=s+"px",i.style.width=s+"px"}function n(){try{return document.createElement("canvas")}catch{throw new Error("You need to specify a canvas element")}}e.render=function(i,s,l){let o=l,c=s;typeof o>"u"&&(!s||!s.getContext)&&(o=s,s=void 0),s||(c=n()),o=t.getOptions(o);const u=t.getImageWidth(i.modules.size,o),h=c.getContext("2d"),v=h.createImageData(u,u);return t.qrToImageData(v.data,i,o),r(h,c,u),h.putImageData(v,0,0),c},e.renderToDataURL=function(i,s,l){let o=l;typeof o>"u"&&(!s||!s.getContext)&&(o=s,s=void 0),o||(o={});const c=e.render(i,s,o),u=o.type||"image/png",h=o.rendererOpts||{};return c.toDataURL(u,h.quality)}})(an)),an}var on={},La;function Il(){if(La)return on;La=1;const e=zi();function t(a,i){const s=a.a/255,l=i+'="'+a.hex+'"';return s<1?l+" "+i+'-opacity="'+s.toFixed(2).slice(1)+'"':l}function r(a,i,s){let l=a+i;return typeof s<"u"&&(l+=" "+s),l}function n(a,i,s){let l="",o=0,c=!1,u=0;for(let h=0;h<a.length;h++){const v=Math.floor(h%i),_=Math.floor(h/i);!v&&!c&&(c=!0),a[h]?(u++,h>0&&v>0&&a[h-1]||(l+=c?r("M",v+s,.5+_+s):r("m",o,0),o=0,c=!1),v+1<i&&a[h+1]||(l+=r("h",u),u=0)):o++}return l}return on.render=function(i,s,l){const o=e.getOptions(s),c=i.modules.size,u=i.modules.data,h=c+o.margin*2,v=o.color.light.a?"<path "+t(o.color.light,"fill")+' d="M0 0h'+h+"v"+h+'H0z"/>':"",_="<path "+t(o.color.dark,"stroke")+' d="'+n(u,c,o.margin)+'"/>',k='viewBox="0 0 '+h+" "+h+'"',w='<svg xmlns="http://www.w3.org/2000/svg" '+(o.width?'width="'+o.width+'" height="'+o.width+'" ':"")+k+' shape-rendering="crispEdges">'+v+_+`</svg>
|
|
9
|
+
`;return typeof l=="function"&&l(null,w),w},on}var Ba;function xl(){if(Ba)return Ft;Ba=1;const e=cl(),t=Tl(),r=Al(),n=Il();function a(i,s,l,o,c){const u=[].slice.call(arguments,1),h=u.length,v=typeof u[h-1]=="function";if(!v&&!e())throw new Error("Callback required as last argument");if(v){if(h<2)throw new Error("Too few arguments provided");h===2?(c=l,l=s,s=o=void 0):h===3&&(s.getContext&&typeof c>"u"?(c=o,o=void 0):(c=o,o=l,l=s,s=void 0))}else{if(h<1)throw new Error("Too few arguments provided");return h===1?(l=s,s=o=void 0):h===2&&!s.getContext&&(o=l,l=s,s=void 0),new Promise(function(_,k){try{const S=t.create(l,o);_(i(S,s,o))}catch(S){k(S)}})}try{const _=t.create(l,o);c(null,i(_,s,o))}catch(_){c(_)}}return Ft.create=t.create,Ft.toCanvas=a.bind(null,r.render),Ft.toDataURL=a.bind(null,r.renderToDataURL),Ft.toString=a.bind(null,function(i,s,l){return n.render(i,l)}),Ft}var Ml=xl();const Rl=ll(Ml);var Nl=D('<p class="muted"> </p>'),Pl=D('<div class="qr svelte-1uqetyj"></div>'),Ll=D('<div class="qr placeholder svelte-1uqetyj"></div>');function Bl(e,t){Ie(t,!0);const r=gt(t,"size",3,192);let n=j(""),a=j(null);yt(()=>{const u=t.value;if(!u){B(n,""),B(a,null);return}Rl.toString(u,{type:"svg",errorCorrectionLevel:"M",margin:1,width:r(),color:{dark:"#1d1f24",light:"#ffffff"}}).then(h=>{B(n,h,!0),B(a,null)}).catch(h=>{console.error("QR generation failed",h),B(a,h.message,!0)})});var i=pr(),s=be(i);{var l=u=>{var h=Nl(),v=d(h);F(()=>P(v,`QR unavailable: ${f(a)??""}`)),L(u,h)},o=u=>{var h=Pl();So(h,()=>f(n),!0),F(()=>_n(h,`width: ${r()??""}px; height: ${r()??""}px;`)),L(u,h)},c=u=>{var h=Ll();F(()=>_n(h,`width: ${r()??""}px; height: ${r()??""}px;`)),L(u,h)};J(s,u=>{f(a)?u(l):f(n)?u(o,1):u(c,-1)})}L(e,i),xe()}var Dl=Si('<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="5" y="5" width="9" height="9" rx="1.5"></rect><path d="M11 3.5V3a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v7a1 1 0 0 0 1 1h.5"></path></svg>');function An(e,t){const r=gt(t,"size",3,16);var n=Dl();F(()=>{he(n,"width",r()),he(n,"height",r())}),L(e,n)}var ql=D("<option> </option>"),Ul=D(`<form class="stack"><div><label for="invite-label">Label</label> <input id="invite-label" type="text" placeholder="e.g. Mom's phone" required="" autocomplete="off"/></div> <div><label for="invite-ttl">Expires after</label> <select id="invite-ttl"></select></div> <div class="actions svelte-1d46kin"><button type="button">Cancel</button> <button type="submit" class="primary"> </button></div></form>`),Fl=D('<p class="muted small svelte-1d46kin"> </p>'),Ol=D('<p class="muted">Share this invite with the new device. It can be scanned as a QR or pasted as text.</p> <div class="qr-wrap svelte-1d46kin"><!></div> <div class="token svelte-1d46kin"><textarea readonly="" rows="3" class="svelte-1d46kin"></textarea> <button class="ghost svelte-1d46kin" type="button" aria-label="Copy invite"><!> Copy</button></div> <!> <div class="actions svelte-1d46kin"><button type="button">Create another</button> <button type="button" class="primary">Done</button></div>',1),$l=D('<div class="backdrop svelte-1d46kin" role="presentation"></div> <div class="dialog svelte-1d46kin" role="dialog" aria-modal="true" aria-labelledby="invite-title" tabindex="-1"><h3 id="invite-title">Invite a friend</h3> <!></div>',1);function zl(e,t){Ie(t,!0);const r=[{label:"15 minutes",value:900*1e3},{label:"1 hour",value:3600*1e3},{label:"24 hours",value:1440*60*1e3},{label:"7 days",value:10080*60*1e3},{label:"No expiry",value:0}];let n=j(""),a=j(1440*60*1e3),i=j(!1),s=j(null);function l(){B(n,""),B(a,1440*60*1e3),B(i,!1),B(s,null)}function o(){l(),t.onClose()}async function c(S){S.preventDefault();const w=f(n).trim();if(!w){ee("error","Label is required");return}B(i,!0);try{const m={label:w};f(a)>0&&(m.ttlMs=f(a));const I=await Rr("/auth/invites",m);B(s,I,!0),ee("success","Invite created"),zt()}catch(m){const I=m instanceof Te?m.code:"error",A=m instanceof Error?m.message:String(m);ee("error",`Invite failed: ${A} (${I})`)}finally{B(i,!1)}}async function u(S){try{await navigator.clipboard.writeText(S),ee("success","Copied to clipboard")}catch(w){ee("error",`Copy failed: ${w.message}`)}}function h(S){S.key==="Escape"&&o()}var v=pr(),_=be(v);{var k=S=>{var w=$l(),m=be(w),I=p(m,2),A=p(d(I),2);{var R=y=>{var x=Ul(),N=d(x),b=p(d(N),2),T=p(N,2),E=p(d(T),2);st(E,21,()=>r,H=>H.value,(H,V)=>{var K=ql(),Q=d(K),te={};F(()=>{P(Q,f(V).label),te!==(te=f(V).value)&&(K.value=(K.__value=f(V).value)??"")}),L(H,K)});var g=p(T,2),C=d(g),M=p(C,2),O=d(M);F(()=>{C.disabled=f(i),M.disabled=f(i),P(O,f(i)?"Creating…":"Create invite")}),kr("submit",x,c),cr(b,()=>f(n),H=>B(n,H)),Ii(E,()=>f(a),H=>B(a,H)),se("click",C,o),L(y,x)},U=y=>{var x=Ol(),N=p(be(x),2),b=d(N);Bl(b,{get value(){return f(s).encodedInvite},size:224});var T=p(N,2),E=d(T),g=p(E,2),C=d(g);An(C,{});var M=p(T,2);{var O=Q=>{var te=Fl(),ae=d(te);F(ie=>P(ae,`Expires ${ie??""}`),[()=>new Date(f(s).expiresAt).toLocaleString()]),L(Q,te)};J(M,Q=>{f(s).expiresAt&&Q(O)})}var H=p(M,2),V=d(H),K=p(V,2);F(()=>xi(E,f(s).encodedInvite)),se("click",g,()=>u(f(s).encodedInvite)),se("click",V,()=>B(s,null)),se("click",K,o),L(y,x)};J(A,y=>{f(s)?y(U,-1):y(R)})}se("click",m,o),se("keydown",I,h),L(S,w)};J(_,S=>{t.open&&S(k)})}L(e,v),xe()}ot(["click","keydown"]);var jl=D('<p class="muted">No members yet. Use “Invite a friend” to add one.</p>'),Vl=D('<span class="badge info">This device</span>'),Hl=D('<button class="danger">Remove</button>'),Kl=D('<li class="svelte-3alf51"><div class="member-main svelte-3alf51"><div><span class="member-label svelte-3alf51"> </span> <!></div> <div class="muted small svelte-3alf51"><code> </code> </div></div> <!></li>'),Yl=D('<ul class="list svelte-3alf51"></ul>'),Jl=D('<p class="muted">No outstanding invites.</p>'),Gl=D('<li class="svelte-3alf51"><div class="member-main svelte-3alf51"><div><span class="member-label svelte-3alf51"> </span></div> <div class="muted small svelte-3alf51"> <!></div></div> <button>Revoke</button></li>'),Ql=D('<ul class="list svelte-3alf51"></ul>'),Wl=D('<section class="stack"><header class="page-header svelte-3alf51"><div><h2>Trust Circle</h2> <p class="muted">Devices authorised to participate in your cadre.</p></div> <button class="primary">Invite a friend</button></header> <div class="card"><h3> </h3> <!></div> <div class="card"><h3> </h3> <!></div></section> <!> <!> <!>',1);function Xl(e,t){Ie(t,!0);const r=ct();let n=j(!1),a=j(null),i=j(null);lt(()=>{zt()});async function s(){const E=f(a);if(E)try{await bn(`/auth/members/${encodeURIComponent(E.peerId)}`),ee("success",`Removed ${E.label||Tr(E.peerId)}`),await zt()}catch(g){const C=g instanceof Te?g.code:"error",M=g instanceof Error?g.message:String(g);ee("error",`Remove failed: ${M} (${C})`)}finally{B(a,null)}}async function l(){const E=f(i);if(E)try{await bn(`/auth/invites/${encodeURIComponent(E.token)}`),ee("success",`Revoked invite for ${E.label}`),await zt()}catch(g){const C=g instanceof Te?g.code:"error",M=g instanceof Error?g.message:String(g);ee("error",`Revoke failed: ${M} (${C})`)}finally{B(i,null)}}var o=Wl(),c=be(o),u=d(c),h=p(d(u),2),v=p(u,2),_=d(v),k=d(_),S=p(_,2);{var w=E=>{var g=jl();L(E,g)},m=E=>{var g=Yl();st(g,21,()=>r.trustCircle.members,C=>C.peerId,(C,M)=>{var O=Kl(),H=d(O),V=d(H),K=d(V),Q=d(K),te=p(K,2);{var ae=X=>{var le=Vl();L(X,le)};J(te,X=>{f(M).self&&X(ae)})}var ie=p(V,2),$=d(ie),ue=d($),re=p($),ge=p(H,2);{var oe=X=>{var le=Hl();F(()=>he(le,"aria-label",`Remove ${f(M).label||f(M).peerId}`)),se("click",le,()=>B(a,f(M),!0)),L(X,le)};J(ge,X=>{f(M).self||X(oe)})}F((X,le)=>{P(Q,f(M).label||"Unnamed"),he($,"title",f(M).peerId),P(ue,X),P(re,` · added ${le??""}`)},[()=>Tr(f(M).peerId),()=>je(f(M).addedAt)]),L(C,O)}),L(E,g)};J(S,E=>{r.trustCircle.members.length===0?E(w):E(m,-1)})}var I=p(v,2),A=d(I),R=d(A),U=p(A,2);{var y=E=>{var g=Jl();L(E,g)},x=E=>{var g=Ql();st(g,21,()=>r.trustCircle.pending,C=>C.token,(C,M)=>{var O=Gl(),H=d(O),V=d(H),K=d(V),Q=d(K),te=p(V,2),ae=d(te),ie=p(ae);{var $=re=>{var ge=_o();F(oe=>P(ge,`· expires ${oe??""}`),[()=>je(f(M).expiresAt)]),L(re,ge)};J(ie,re=>{f(M).expiresAt&&re($)})}var ue=p(H,2);F(re=>{P(Q,f(M).label),P(ae,`issued ${re??""} `)},[()=>je(f(M).createdAt)]),se("click",ue,()=>B(i,f(M),!0)),L(C,O)}),L(E,g)};J(U,E=>{r.trustCircle.pending.length===0?E(y):E(x,-1)})}var N=p(c,2);zl(N,{get open(){return f(n)},onClose:()=>B(n,!1)});var b=p(N,2);{let E=ne(()=>f(a)!==null),g=ne(()=>`Remove ${f(a)?.label||"this device"} from your trust circle? This cannot be undone — they will lose access to your cadre.`);Ar(b,{get open(){return f(E)},title:"Remove member",get message(){return f(g)},confirmLabel:"Remove",danger:!0,onConfirm:s,onCancel:()=>B(a,null)})}var T=p(b,2);{let E=ne(()=>f(i)!==null),g=ne(()=>`Revoke the invite for ${f(i)?.label??"this invite"}? It will no longer be redeemable.`);Ar(T,{get open(){return f(E)},title:"Revoke invite",get message(){return f(g)},confirmLabel:"Revoke",danger:!0,onConfirm:l,onCancel:()=>B(i,null)})}F(()=>{P(k,`Members (${r.trustCircle.members.length??""})`),P(R,`Pending invites (${r.trustCircle.pending.length??""})`)}),se("click",h,()=>B(n,!0)),L(e,o),xe()}ot(["click"]);var Zl=D('<!> <dl class="kv svelte-hh3bto"><div class="svelte-hh3bto"><dt class="svelte-hh3bto">External IP</dt><dd class="svelte-hh3bto"> </dd></div> <div class="svelte-hh3bto"><dt class="svelte-hh3bto">Router IP</dt><dd class="svelte-hh3bto"> </dd></div> <div class="svelte-hh3bto"><dt class="svelte-hh3bto">External port</dt><dd class="svelte-hh3bto"> </dd></div> <div class="svelte-hh3bto"><dt class="svelte-hh3bto">Internal port</dt><dd class="svelte-hh3bto"> </dd></div> <div class="svelte-hh3bto"><dt class="svelte-hh3bto">Last tested</dt><dd class="svelte-hh3bto"> </dd></div> <div class="svelte-hh3bto"><dt class="svelte-hh3bto">External IP detected</dt><dd class="svelte-hh3bto"> </dd></div></dl> <button> </button>',1),ec=D('<p class="muted">Loading…</p>'),tc=D(`<p>Your ISP is using Carrier-Grade NAT (CGNAT). You'll need to either:</p> <ul class="svelte-hh3bto"><li>Ask your ISP for a public IP.</li> <li>Use a relay / tunnel (e.g. Cloudflare Tunnel, Tailscale Funnel).</li></ul>`,1),rc=D(`<p>Your cadre isn't reachable from the open internet. The most likely causes:</p> <ul class="svelte-hh3bto"><li> </li> <li> </li></ul>`,1),nc=D('<div class="card warning svelte-hh3bto"><h3>Manual fix</h3> <!> <p class="muted small svelte-hh3bto">See <a href="https://github.com/gotchoices/sereus/blob/master/docs/cadre-host.md" target="_blank" rel="noreferrer">docs/cadre-host.md</a> for vendor-specific router instructions.</p></div>'),ac=D("<option> </option>"),ic=D('<span class="muted small svelte-hh3bto">(stored in OS keychain)</span>'),sc=D('<div><label> <!></label> <input autocomplete="off"/></div>'),oc=D('<p class="muted small svelte-hh3bto"> </p>'),lc=D(`<section class="stack"><header><h2>Connectivity</h2> <p class="muted">How the outside world reaches your cadre.</p></header> <div class="grid two svelte-hh3bto"><div class="card status-card"><h3>Current status</h3> <!></div> <!></div> <form class="card stack"><h3>Port forwarding</h3> <label class="row inline svelte-hh3bto"><input type="checkbox" class="svelte-hh3bto"/> <span>Attempt UPnP / NAT-PMP automatically</span></label> <div><label for="external-port">External port</label> <input id="external-port" type="number" min="1" max="65535"/></div> <div class="actions svelte-hh3bto"><button type="submit" class="primary"> </button></div></form> <form class="card stack"><h3>Dynamic DNS</h3> <p class="muted">Publish a stable hostname so your friends don't need to track your IP.</p> <div><label for="ddns-provider">Provider</label> <select id="ddns-provider"><option>— none —</option><!></select></div> <div><label for="ddns-hostname">Hostname</label> <input id="ddns-hostname" type="text" placeholder="e.g. yourname.duckdns.org" autocomplete="off"/></div> <!> <label class="row inline svelte-hh3bto"><input type="checkbox" class="svelte-hh3bto"/> <span>I manage this DDNS record outside cadre-host (don't auto-update)</span></label> <div class="actions svelte-hh3bto"><button type="submit" class="primary"> </button></div> <!></form></section>`);function cc(e,t){Ie(t,!0);const r=ct();let n=j(Ye([])),a=j(""),i=j(""),s=j(!1),l=j(Ye({})),o=j(!0),c=j(4001),u=j(!1),h=j(!1),v=j(!1);const _=ne(()=>f(n).find(q=>q.id===f(a))??null),k=ne(()=>!!r.connectivity&&(r.connectivity.directReachability==="unreachable"||r.connectivity.portMode==="failed")),S=ne(()=>r.connectivity?.cgnatDetected===!0);lt(()=>{$t(),w()}),yt(()=>{const q=r.connectivity;q&&(f(a)===""&&q.ddns.providerId&&B(a,q.ddns.providerId,!0),f(i)===""&&q.ddns.hostname&&B(i,q.ddns.hostname,!0),B(s,q.ddns.externallyManaged,!0),B(c,q.externalPort,!0))});async function w(){try{const q=await Re("/nat/providers");B(n,q,!0)}catch(q){ee("error",`Could not load DDNS providers: ${q.message}`)}}async function m(){B(u,!0);try{await Rr("/nat/test"),ee("success","Reachability test complete"),await $t()}catch(q){ee("error",`Test failed: ${q.message}`)}finally{B(u,!1)}}async function I(q){q.preventDefault(),B(h,!0);try{await yn("/nat/ddns",{providerId:f(a),hostname:f(i),config:{...f(l)},externallyManaged:f(s)}),ee("success","DDNS settings saved"),B(l,{},!0),await $t()}catch(Z){const ce=Z instanceof Te?Z.code:"error";ee("error",`Save failed: ${Z.message} (${ce})`)}finally{B(h,!1)}}async function A(q){q.preventDefault(),B(v,!0);try{await yn("/nat/settings",{upnpEnabled:f(o),externalPort:f(c)}),ee("success","Port settings saved"),await $t()}catch(Z){ee("error",`Save failed: ${Z.message}`)}finally{B(v,!1)}}var R=lc(),U=p(d(R),2),y=d(U),x=p(d(y),2);{var N=q=>{var Z=Zl(),ce=be(Z);Ui(ce,{get reachability(){return r.connectivity.directReachability},get portMode(){return r.connectivity.portMode}});var pe=p(ce,2),fe=d(pe),we=p(d(fe)),Ce=d(we),et=p(fe,2),Ut=p(d(et)),Xt=d(Ut),tt=p(et,2),rt=p(d(tt)),Nr=d(rt),Vn=p(tt,2),Vi=p(d(Vn)),Hi=d(Vi),Hn=p(Vn,2),Ki=p(d(Hn)),Yi=d(Ki),Ji=p(Hn,2),Gi=p(d(Ji)),Qi=d(Gi),Pr=p(pe,2),Wi=d(Pr);F((Xi,Zi)=>{P(Ce,r.connectivity.externalIp??"—"),P(Xt,r.connectivity.routerExternalIp??"—"),P(Nr,r.connectivity.externalPort),P(Hi,r.connectivity.internalPort),P(Yi,Xi),P(Qi,Zi),Pr.disabled=f(u),P(Wi,f(u)?"Testing…":"Test reachability")},[()=>je(r.connectivity.lastTestedAt),()=>je(r.connectivity.externalIpDetectedAt)]),se("click",Pr,m),L(q,Z)},b=q=>{var Z=ec();L(q,Z)};J(x,q=>{r.connectivity?q(N):q(b,-1)})}var T=p(y,2);{var E=q=>{var Z=nc(),ce=p(d(Z),2);{var pe=we=>{var Ce=tc();L(we,Ce)},fe=we=>{var Ce=rc(),et=p(be(Ce),2),Ut=d(et),Xt=d(Ut),tt=p(Ut,2),rt=d(tt);F(()=>{P(Xt,`Your router doesn't allow UPnP / NAT-PMP — open it and enable the feature, or set up a manual port-forward for port ${r.connectivity?.externalPort??""}.`),P(rt,`A firewall on this machine is blocking inbound TCP on port ${r.connectivity?.internalPort??""}.`)}),L(we,Ce)};J(ce,we=>{f(S)?we(pe):we(fe,-1)})}L(q,Z)};J(T,q=>{(f(k)||f(S))&&q(E)})}var g=p(U,2),C=p(d(g),2),M=d(C),O=p(C,2),H=p(d(O),2),V=p(O,2),K=d(V),Q=d(K),te=p(g,2),ae=p(d(te),4),ie=p(d(ae),2),$=d(ie);$.value=$.__value="";var ue=p($);st(ue,17,()=>f(n),q=>q.id,(q,Z)=>{var ce=ac(),pe=d(ce),fe={};F(()=>{P(pe,f(Z).displayName),fe!==(fe=f(Z).id)&&(ce.value=(ce.__value=f(Z).id)??"")}),L(q,ce)});var re=p(ae,2),ge=p(d(re),2),oe=p(re,2);{var X=q=>{var Z=pr(),ce=be(Z);st(ce,17,()=>f(_).configFields,pe=>pe.key,(pe,fe)=>{var we=sc(),Ce=d(we),et=d(Ce),Ut=p(et);{var Xt=rt=>{var Nr=ic();L(rt,Nr)};J(Ut,rt=>{f(fe).secret&&rt(Xt)})}var tt=p(Ce,2);F(()=>{he(Ce,"for",`ddns-${f(fe).key}`),P(et,`${f(fe).label??""} `),he(tt,"id",`ddns-${f(fe).key}`),he(tt,"type",f(fe).secret?"password":"text"),xi(tt,f(l)[f(fe).key]??"")}),se("input",tt,rt=>B(l,{...f(l),[f(fe).key]:rt.currentTarget.value},!0)),L(pe,we)}),L(q,Z)};J(oe,q=>{f(_)&&q(X)})}var le=p(oe,2),Ne=d(le),Ze=p(le,2),ut=d(Ze),Fe=d(ut),Et=p(Ze,2);{var Oe=q=>{var Z=oc(),ce=d(Z);F(pe=>P(ce,`Last DDNS update ${pe??""}
|
|
10
|
+
${r.connectivity.ddns.lastUpdateOk===!0?"· ok":r.connectivity.ddns.lastUpdateOk===!1?`· failed: ${r.connectivity.ddns.lastError??"error"}`:""}`),[()=>je(r.connectivity.ddns.lastUpdateAt)]),L(q,Z)};J(Et,q=>{r.connectivity?.ddns.lastUpdateAt&&q(Oe)})}F(()=>{K.disabled=f(v),P(Q,f(v)?"Saving…":"Save port settings"),ut.disabled=f(h)||f(a)==="",P(Fe,f(h)?"Saving…":"Save DDNS settings")}),kr("submit",g,A),mn(M,()=>f(o),q=>B(o,q)),cr(H,()=>f(c),q=>B(c,q)),kr("submit",te,I),Ii(ie,()=>f(a),q=>B(a,q)),cr(ge,()=>f(i),q=>B(i,q)),mn(Ne,()=>f(s),q=>B(s,q)),L(e,R),xe()}ot(["click","input"]);var uc=D(`<p class="muted">No managed nodes yet. cadre-host v1 doesn't auto-spawn nodes — they
|
|
11
|
+
come up once you complete an invite redemption.</p>`),dc=D('<tr class="svelte-7tcksg"><td class="svelte-7tcksg"><code> </code></td><td class="svelte-7tcksg"> </td><td class="svelte-7tcksg"><span> </span></td><td class="svelte-7tcksg"><code> </code></td><td class="muted svelte-7tcksg"> </td><td class="svelte-7tcksg"><a>Details →</a></td></tr>'),fc=D('<table class="svelte-7tcksg"><thead><tr><th scope="col" class="svelte-7tcksg">ID</th><th scope="col" class="svelte-7tcksg">Profile</th><th scope="col" class="svelte-7tcksg">Status</th><th scope="col" class="svelte-7tcksg">Party</th><th scope="col" class="svelte-7tcksg">Spawned</th><th scope="col" class="svelte-7tcksg"></th></tr></thead><tbody></tbody></table>'),vc=D('<section class="stack"><header><h2>Nodes</h2> <p class="muted">Cadre nodes managed by this host.</p></header> <div class="card"><!></div></section>');function hc(e,t){Ie(t,!1);const r=ct();lt(()=>{Pi()}),zn();var n=vc(),a=p(d(n),2),i=d(a);{var s=o=>{var c=uc();L(o,c)},l=o=>{var c=fc(),u=p(d(c));st(u,5,()=>r.nodes,h=>h.id,(h,v)=>{var _=dc(),k=d(_),S=d(k),w=d(S),m=p(k),I=d(m),A=p(m),R=d(A),U=d(R),y=p(A),x=d(y),N=d(x),b=p(y),T=d(b),E=p(b),g=d(E);F((C,M,O)=>{P(w,f(v).id),P(I,f(v).profile),wt(R,1,`badge ${f(v).status==="running"?"ok":"err"}`),P(U,f(v).status),he(x,"title",f(v).partyId),P(N,C),P(T,M),he(g,"href",O)},[()=>Tr(f(v).partyId),()=>je(f(v).spawnedAt),()=>Tt("node-detail",{id:f(v).id})]),L(h,_)}),L(o,c)};J(i,o=>{r.nodes.length===0?o(s):o(l,-1)})}L(e,n),xe()}var pc=Si('<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M13.5 8a5.5 5.5 0 1 1-1.6-3.9"></path><path d="M14 2v3h-3"></path></svg>');function gc(e,t){const r=gt(t,"size",3,16);var n=pc();F(()=>{he(n,"width",r()),he(n,"height",r())}),L(e,n)}var _c=D('<span class="muted small svelte-15ufwrh"> </span>'),mc=D('<p class="muted"> </p>'),yc=D('<pre class="logs svelte-15ufwrh"> </pre>'),bc=D('<div class="card log-card svelte-15ufwrh"><div class="header svelte-15ufwrh"><h3>Recent logs</h3> <div class="row"><!> <button class="ghost svelte-15ufwrh" aria-label="Refresh logs"><!> Refresh</button></div></div> <!></div>');function wc(e,t){Ie(t,!0);const r=gt(t,"lines",3,200);let n=j(Ye([])),a=j(!1),i=j(null);async function s(){if(t.nodeId){B(a,!0);try{const m=await Re(`/api/nodes/${encodeURIComponent(t.nodeId)}/logs?lines=${r()}`);B(n,m.lines,!0),B(i,new Date,!0)}catch(m){ee("error",`Logs unavailable: ${m.message}`)}finally{B(a,!1)}}}yt(()=>{s()});var l=bc(),o=d(l),c=p(d(o),2),u=d(c);{var h=m=>{var I=_c(),A=d(I);F(R=>P(A,`as of ${R??""}`),[()=>f(i).toLocaleTimeString()]),L(m,I)};J(u,m=>{f(i)&&m(h)})}var v=p(u,2),_=d(v);gc(_,{});var k=p(o,2);{var S=m=>{var I=mc(),A=d(I);F(()=>P(A,f(a)?"Loading…":"No log lines yet.")),L(m,I)},w=m=>{var I=yc(),A=d(I);F(R=>P(A,R),[()=>f(n).join(`
|
|
12
|
+
`)]),L(m,I)};J(k,m=>{f(n).length===0?m(S):m(w,-1)})}F(()=>v.disabled=f(a)),se("click",v,s),L(e,l),xe()}ot(["click"]);var Ec=D('<div class="card"><p class="muted"> </p></div>'),kc=D('<div class="card"><div class="page-header svelte-1eq4g96"><div><h2><code> </code></h2> <p class="muted"> <code> </code></p></div> <span> </span></div> <dl class="kv svelte-1eq4g96"><div class="svelte-1eq4g96"><dt class="svelte-1eq4g96">Workdir</dt><dd class="svelte-1eq4g96"><code> </code></dd></div> <div class="svelte-1eq4g96"><dt class="svelte-1eq4g96">Spawned</dt><dd class="svelte-1eq4g96"> </dd></div> <div class="svelte-1eq4g96"><dt class="svelte-1eq4g96">Ports</dt><dd class="svelte-1eq4g96"> </dd></div> <div class="svelte-1eq4g96"><dt class="svelte-1eq4g96">CPU</dt><dd class="svelte-1eq4g96"> </dd></div> <div class="svelte-1eq4g96"><dt class="svelte-1eq4g96">Memory (RSS)</dt><dd class="svelte-1eq4g96"> </dd></div></dl> <div class="actions svelte-1eq4g96"><button> </button> <button> </button> <button class="danger">Stop</button></div></div> <!>',1),Cc=D('<section class="stack"><header class="row"><a class="back svelte-1eq4g96">← Back to nodes</a></header> <!></section> <!>',1);function Sc(e,t){Ie(t,!0);const r=ct();let n=j(!1),a=j(null),i;const s=ne(()=>r.nodes.find(m=>m.id===t.id)??null),l=ne(()=>r.nodeStats[t.id]??null);lt(()=>{qr(t.id),i=setInterval(()=>void qr(t.id),5e3)}),Bo(()=>{i&&clearInterval(i)});async function o(m){B(a,m,!0);try{await Rr(`/api/nodes/${encodeURIComponent(t.id)}/${m}`),ee("success",`${m} requested`),await qr(t.id)}catch(I){const A=I instanceof Te?I.code:"error",R=I instanceof Error?I.message:String(I);ee("error",`${m} failed: ${R} (${A})`)}finally{B(a,null)}}var c=Cc(),u=be(c),h=d(u),v=d(h),_=p(h,2);{var k=m=>{var I=Ec(),A=d(I),R=d(A);F(()=>P(R,`Loading node ${t.id??""}…`)),L(m,I)},S=m=>{var I=kc(),A=be(I),R=d(A),U=d(R),y=d(U),x=d(y),N=d(x),b=p(y,2),T=d(b),E=p(T),g=d(E),C=p(U,2),M=d(C),O=p(R,2),H=d(O),V=p(d(H)),K=d(V),Q=d(K),te=p(H,2),ae=p(d(te)),ie=d(ae),$=p(te,2),ue=p(d($)),re=d(ue),ge=p($,2),oe=p(d(ge)),X=d(oe),le=p(ge,2),Ne=p(d(le)),Ze=d(Ne),ut=p(O,2),Fe=d(ut),Et=d(Fe),Oe=p(Fe,2),q=d(Oe),Z=p(Oe,2),ce=p(A,2);wc(ce,{get nodeId(){return f(s).id}}),F((pe,fe,we,Ce)=>{P(N,f(s).id),P(T,`${f(s).profile??""} · party `),he(E,"title",f(s).partyId),P(g,pe),wt(C,1,`badge ${f(s).status==="running"?"ok":"err"}`,"svelte-1eq4g96"),P(M,f(s).status),P(Q,f(s).workdir||"—"),P(ie,fe),P(re,`health ${f(s).ports.health??""} · metrics ${f(s).ports.metrics??""} · p2p ${f(s).ports.p2p??""}`),P(X,we),P(Ze,Ce),Fe.disabled=f(a)!==null||f(s).status==="running",P(Et,f(a)==="start"?"Starting…":"Start"),Oe.disabled=f(a)!==null||f(s).status==="running",P(q,f(a)==="restart"?"Restarting…":"Restart"),Z.disabled=f(a)!==null||f(s).status!=="running"},[()=>Tr(f(s).partyId),()=>je(f(s).spawnedAt),()=>f(l)?f(l).cpu.toFixed(1)+"%":"—",()=>Yo(f(l)?.rssBytes)]),se("click",Fe,()=>o("start")),se("click",Oe,()=>o("restart")),se("click",Z,()=>B(n,!0)),L(m,I)};J(_,m=>{f(s)?m(S,-1):m(k)})}var w=p(u,2);{let m=ne(()=>`Stop node ${t.id}? In-flight requests will be terminated.`);Ar(w,{get open(){return f(n)},title:"Stop node",get message(){return f(m)},confirmLabel:"Stop",danger:!0,onConfirm:async()=>{B(n,!1),await o("stop")},onCancel:()=>B(n,!1)})}F(m=>he(v,"href",m),[()=>Tt("nodes")]),L(e,c),xe()}ot(["click"]);var Tc=D('<a target="_blank" rel="noreferrer">Release notes</a>'),Ac=D('<div class="banner info svelte-1cl3wo6"><div><strong>Update available</strong> <span class="muted"> </span> <!></div> <button type="button" class="primary"> </button></div>'),Ic=D('<p class="muted small svelte-1cl3wo6"> </p>'),xc=D('<p class="error small svelte-1cl3wo6"> </p>'),Mc=D('<dl class="kv svelte-1cl3wo6"><div class="svelte-1cl3wo6"><dt class="svelte-1cl3wo6">Install ID</dt><dd class="svelte-1cl3wo6"><code> </code></dd></div> <div class="svelte-1cl3wo6"><dt class="svelte-1cl3wo6">Installed at</dt><dd class="svelte-1cl3wo6"> </dd></div> <div class="svelte-1cl3wo6"><dt class="svelte-1cl3wo6">Installer version</dt><dd class="svelte-1cl3wo6"> </dd></div> <div class="svelte-1cl3wo6"><dt class="svelte-1cl3wo6">UI port</dt><dd class="svelte-1cl3wo6"> </dd></div> <div class="svelte-1cl3wo6"><dt class="svelte-1cl3wo6">libp2p port</dt><dd class="svelte-1cl3wo6"> </dd></div> <div class="svelte-1cl3wo6"><dt class="svelte-1cl3wo6">Data dir</dt> <dd class="copy-row svelte-1cl3wo6"><code> </code> <button type="button" class="ghost" aria-label="Copy data dir"><!></button></dd></div> <div class="svelte-1cl3wo6"><dt class="svelte-1cl3wo6">Identity</dt> <dd class="copy-row svelte-1cl3wo6"><code> </code> <button type="button" class="ghost" aria-label="Copy identity path"><!></button></dd></div></dl> <p class="muted small svelte-1cl3wo6">UI port, libp2p port, and data dir are set at install time and can only be changed by editing <code>host.config.json</code> and restarting the service.</p>',1),Rc=D('<p class="muted">Loading…</p>'),Nc=D(`<section class="stack"><header><h2>Settings</h2> <p class="muted">Update preferences and install metadata.</p></header> <form class="card stack"><h3>Updates</h3> <label class="row inline svelte-1cl3wo6"><input type="checkbox" class="svelte-1cl3wo6"/> <span>Apply updates automatically when available</span></label> <div><label for="manifest-url">Manifest URL (optional override)</label> <input id="manifest-url" type="url" placeholder="https://example.org/latest.json" autocomplete="off"/></div> <!> <!> <div class="actions svelte-1cl3wo6"><button type="submit" class="primary"> </button></div></form> <div class="card"><h3>Install</h3> <!></div> <div class="card"><h3>Uninstall</h3> <p class="muted">Stop the cadre-host service, then remove the data directory above and the
|
|
13
|
+
installed package:</p> <pre>npm uninstall -g @serfab/cadre-host</pre> <p class="muted small svelte-1cl3wo6">See the README under <a href="https://github.com/gotchoices/sereus/blob/master/packages/cadre-host/README.md" target="_blank" rel="noreferrer">Uninstall</a> for OS-specific service teardown.</p></div></section>`);function Pc(e,t){Ie(t,!0);const r=ct();let n=j(!1),a=j(""),i=j(!1),s=j(!1);lt(()=>{En(),Cr()}),yt(()=>{const g=r.settings;g&&(B(n,g.updates.autoApply,!0),B(a,g.updates.manifestUrl??"",!0))});async function l(g){g.preventDefault(),B(i,!0);try{const C={updates:{autoApply:f(n)}};f(a).trim()&&(C.updates.manifestUrl=f(a).trim()),await yn("/api/settings",C),ee("success","Update preferences saved"),await En()}catch(C){const M=C instanceof Te?C.code:"error";ee("error",`Save failed: ${C.message} (${M})`)}finally{B(i,!1)}}async function o(){B(s,!0);try{const g=await Rr("/update/apply");ee("success",`Applied ${g.fromVersion} → ${g.toVersion}`+(g.restarted?" (service restarting)":"")),await Cr()}catch(g){const C=g instanceof Te?g.code:"error";ee("error",`Apply failed: ${g.message} (${C})`)}finally{B(s,!1)}}async function c(g){try{await navigator.clipboard.writeText(g),ee("success","Copied")}catch(C){ee("error",`Copy failed: ${C.message}`)}}var u=Nc(),h=p(d(u),2),v=p(d(h),2),_=d(v),k=p(v,2),S=p(d(k),2),w=p(k,2);{var m=g=>{var C=Ac(),M=d(C),O=p(d(M),2),H=d(O),V=p(O,2);{var K=ae=>{var ie=Tc();F(()=>he(ie,"href",r.update.available.releaseNotesUrl)),L(ae,ie)};J(V,ae=>{r.update.available.releaseNotesUrl&&ae(K)})}var Q=p(M,2),te=d(Q);F(()=>{P(H,`→ version ${r.update.available.version??""}`),Q.disabled=f(s),P(te,f(s)?"Applying…":"Apply now")}),se("click",Q,o),L(g,C)},I=g=>{var C=Ic(),M=d(C);F(O=>P(M,`No update available. Last checked ${O??""}.`),[()=>je(r.update.lastChecked)]),L(g,C)};J(w,g=>{r.update?.available?.version?g(m):r.update?.lastChecked&&g(I,1)})}var A=p(w,2);{var R=g=>{var C=xc(),M=d(C);F(()=>P(M,`Last error: ${r.update.lastError.message??""} (${r.update.lastError.code??""})`)),L(g,C)};J(A,g=>{r.update?.lastError&&g(R)})}var U=p(A,2),y=d(U),x=d(y),N=p(h,2),b=p(d(N),2);{var T=g=>{var C=Mc(),M=be(C),O=d(M),H=p(d(O)),V=d(H),K=d(V),Q=p(O,2),te=p(d(Q)),ae=d(te),ie=p(Q,2),$=p(d(ie)),ue=d($),re=p(ie,2),ge=p(d(re)),oe=d(ge),X=p(re,2),le=p(d(X)),Ne=d(le),Ze=p(X,2),ut=p(d(Ze),2),Fe=d(ut),Et=d(Fe),Oe=p(Fe,2),q=d(Oe);An(q,{});var Z=p(Ze,2),ce=p(d(Z),2),pe=d(ce),fe=d(pe),we=p(pe,2),Ce=d(we);An(Ce,{}),F(et=>{P(K,r.settings.installId),P(ae,et),P(ue,r.settings.installerVersion??"—"),P(oe,r.settings.uiPort),P(Ne,r.settings.libp2pPort),P(Et,r.settings.dataDir),P(fe,r.settings.identityPath)},[()=>je(r.settings.installedAt)]),se("click",Oe,()=>c(r.settings.dataDir)),se("click",we,()=>c(r.settings.identityPath)),L(g,C)},E=g=>{var C=Rc();L(g,C)};J(b,g=>{r.settings?g(T):g(E,-1)})}F(()=>{y.disabled=f(i),P(x,f(i)?"Saving…":"Save update preferences")}),kr("submit",h,l),mn(_,()=>f(n),g=>B(n,g)),cr(S,()=>f(a),g=>B(a,g)),L(e,u),xe()}ot(["click"]);function Da(e){return e==="c"}function Lc(e){const t=e.strandId;return e.published?e.removed&&e.alone?{kind:"banner",strandId:t}:{kind:"toast",tone:"success",text:`Left ${t}`}:{kind:"toast",tone:"info",text:`${t} was already removed`}}var Bc=D(`<div class="card warning svelte-ngb3vw" role="status"><p>You left <code class="svelte-ngb3vw"> </code> while this machine had no connection to your
|
|
14
|
+
other cadre nodes. The removal is recorded here, but your other nodes may keep
|
|
15
|
+
running it until they reconnect and sync.</p> <div class="actions svelte-ngb3vw"><button>Dismiss</button></div></div>`),Dc=D('<p class="error svelte-ngb3vw"> </p>'),qc=D('<p class="muted">Loading…</p>'),Uc=D('<p class="muted">This party doesn’t take part in any shared networks yet.</p>'),Fc=D('<li class="svelte-ngb3vw"><div class="strand-main svelte-ngb3vw"><code class="strand-id svelte-ngb3vw"> </code> <div class="row meta svelte-ngb3vw"><span> </span> <span class="muted small svelte-ngb3vw"> </span></div></div> <button class="danger">Leave</button></li>'),Oc=D('<ul class="list svelte-ngb3vw"></ul>'),$c=D(`<section class="stack"><header><h2>Strands</h2> <p class="muted">Shared networks this party takes part in. Leaving one takes your whole party out of
|
|
16
|
+
it. The other parties in that network are unaffected and keep running it.</p></header> <!> <div class="card"><!> <!></div></section> <!>`,1);function zc(e,t){Ie(t,!0);function r(b){return`Every cadre node in your party will stop taking part in ${b}. The other parties in that network are unaffected — this only removes yours. You can re-join later by publishing the strand again.`}function n(b){return`This is irreversible. ${b} is a closed network, and your party’s membership key for it is stored only in the row you are about to delete. Once it is gone your party can never admit another member to that network, and re-publishing the strand would create a different key that its existing members will not accept. Every cadre node in your party will stop taking part in it. The other parties in that network are unaffected.`}const a="This machine currently has no connection to your other cadre nodes. If you leave now, they may keep running this network until they sync.",i=ct();let s=j(null),l=j(null);const o=ne(()=>Da(f(s)?.type??"o")),c=ne(()=>i.strands.loaded?i.strands.list.length===0?"empty":"list":i.strands.error?"none":"loading");lt(()=>{wn()});function u(b){return b.running?b.status?`running · ${b.status}`:"running":"not running"}async function h(){const b=f(s);if(!b)return;const T=Da(b.type)?"?confirm=1":"";try{const E=await bn(`/api/strands/${encodeURIComponent(b.id)}${T}`);v(Lc(E)),await wn()}catch(E){const g=E instanceof Error?E.message:String(E);if(E instanceof Te&&E.status===428)ee("error",g);else{const C=E instanceof Te?E.code:"error";ee("error",`Leave failed: ${g} (${C})`)}}finally{B(s,null)}}function v(b){b.kind==="banner"?B(l,b.strandId,!0):ee(b.tone,b.text)}var _=$c(),k=be(_),S=p(d(k),2);{var w=b=>{var T=Bc(),E=d(T),g=p(d(E)),C=d(g),M=p(E,2),O=d(M);F(()=>P(C,f(l))),se("click",O,()=>B(l,null)),L(b,T)};J(S,b=>{f(l)&&b(w)})}var m=p(S,2),I=d(m);{var A=b=>{var T=Dc(),E=d(T);F(()=>P(E,`Couldn’t load strands: ${i.strands.error??""}`)),L(b,T)};J(I,b=>{i.strands.error&&b(A)})}var R=p(I,2);{var U=b=>{var T=qc();L(b,T)},y=b=>{var T=Uc();L(b,T)},x=b=>{var T=Oc();st(T,21,()=>i.strands.list,E=>E.id,(E,g)=>{var C=Fc(),M=d(C),O=d(M),H=d(O),V=p(O,2),K=d(V),Q=d(K),te=p(K,2),ae=d(te),ie=p(M,2);F($=>{P(H,f(g).id),wt(K,1,`badge ${f(g).type==="c"?"warn":"info"}`),P(Q,f(g).type==="c"?"Closed":"Open"),P(ae,$),he(ie,"aria-label",`Leave ${f(g).id}`)},[()=>u(f(g))]),se("click",ie,()=>B(s,f(g),!0)),L(E,C)}),L(b,T)};J(R,b=>{f(c)==="loading"?b(U):f(c)==="empty"?b(y,1):f(c)==="list"&&b(x,2)})}var N=p(k,2);{let b=ne(()=>f(s)!==null),T=ne(()=>f(o)?"Leave this closed network?":"Leave this shared network?"),E=ne(()=>f(o)?n(f(s)?.id??""):r(f(s)?.id??"")),g=ne(()=>i.strands.loaded&&i.strands.controlConnections===0?a:void 0),C=ne(()=>f(o)?f(s)?.id??"":void 0);Ar(N,{get open(){return f(b)},get title(){return f(T)},get message(){return f(E)},get note(){return f(g)},get requireText(){return f(C)},confirmLabel:"Leave",danger:!0,onConfirm:h,onCancel:()=>B(s,null)})}L(e,_),xe()}ot(["click"]);var jc=D('<div role="status"><span class="text svelte-g7yjw8"> </span> <button class="ghost svelte-g7yjw8" aria-label="Dismiss">×</button></div>'),Vc=D('<div class="toast-stack svelte-g7yjw8" aria-live="polite" aria-relevant="additions"></div>');function Hc(e,t){Ie(t,!1);const r=ct();zn();var n=pr(),a=be(n);{var i=s=>{var l=Vc();st(l,5,()=>r.toasts,o=>o.id,(o,c)=>{var u=jc(),h=d(u),v=d(h),_=p(h,2);F(()=>{wt(u,1,`toast toast-${f(c).kind??""}`,"svelte-g7yjw8"),P(v,f(c).text)}),se("click",_,()=>Ri(f(c).id)),L(o,u)}),L(s,l)};J(a,s=>{r.toasts.length>0&&s(i)})}L(e,n),xe()}ot(["click"]);var Kc=D("<a> </a>"),Yc=D('<a class="visually-hidden" href="#main">Skip to content</a> <header class="topbar svelte-1r8vfx3"><div class="brand svelte-1r8vfx3"><span class="logo svelte-1r8vfx3" aria-hidden="true">●</span> <span>cadre-host</span> <!></div> <nav aria-label="Primary" class="svelte-1r8vfx3"></nav></header> <main id="main" class="svelte-1r8vfx3"><!></main> <!>',1);function Jc(e,t){Ie(t,!1);const r=$o(),n=ct();function a(y){switch(y){case"ok":return"OK";case"warn":return"Attention";case"error":return"Error";default:return"…"}}const i=[{name:"home",label:"Home"},{name:"trust-circle",label:"Trust Circle"},{name:"connectivity",label:"Connectivity"},{name:"nodes",label:"Nodes"},{name:"settings",label:"Settings"},{name:"strands",label:"Strands"}];function s(y){return y==="nodes"?r.route.name==="nodes"||r.route.name==="node-detail":r.route.name===y}lt(()=>{zo(),Ni(),Pi(),zt(),$t(),Cr(),En();let y=!0;const x=Ko(N=>Oo(N),{onError(N,b){y&&(y=!1,ee("error",`Lost realtime updates; retrying in ${Math.round(b/1e3)}s`))},onOpen(){y=!0}});return()=>{x.close(),jo()}}),zn();var l=Yc(),o=p(be(l),2),c=d(o),u=p(d(c),4);{let y=Er(()=>a(n.status));qi(u,{get status(){return n.status},get label(){return f(y)},size:10})}var h=p(c,2);st(h,5,()=>i,y=>y.name,(y,x)=>{var N=Kc();let b;var T=d(N);F((E,g,C)=>{he(N,"href",E),he(N,"aria-current",g),b=wt(N,1,"svelte-1r8vfx3",null,b,C),P(T,f(x).label)},[()=>Tt(f(x).name),()=>s(f(x).name)?"page":void 0,()=>({active:s(f(x).name)})]),L(y,N)});var v=p(o,2),_=d(v);{var k=y=>{Xl(y,{})},S=y=>{cc(y,{})},w=y=>{hc(y,{})},m=y=>{{let x=Er(()=>r.route.params.id??"");Sc(y,{get id(){return f(x)}})}},I=y=>{Pc(y,{})},A=y=>{zc(y,{})},R=y=>{nl(y,{})};J(_,y=>{r.route.name==="trust-circle"?y(k):r.route.name==="connectivity"?y(S,1):r.route.name==="nodes"?y(w,2):r.route.name==="node-detail"?y(m,3):r.route.name==="settings"?y(I,4):r.route.name==="strands"?y(A,5):y(R,-1)})}var U=p(v,2);Hc(U,{}),L(e,l),xe()}const ji=document.getElementById("app");if(!ji)throw new Error("Missing #app mount target");mo(Jc,{target:ji});
|
|
17
|
+
//# sourceMappingURL=index-C-iks41M.js.map
|