wire-mesh 2.0.3 → 2.0.4
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.
|
@@ -69,4 +69,4 @@ ${wc.repeat(a.depth)}}`:a.close=`}`;break}case L.TAG:o+=String(c),o+=Dc(L.POS_IN
|
|
|
69
69
|
|
|
70
70
|
Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let n of e.seen.entries()){let r=n[1];if(t===n[0]){a(n);continue}if(e.external){let r=e.external.registry.get(n[0])?.id;if(t!==n[0]&&r){a(n);continue}}if(e.metadataRegistry.get(n[0])?.id){a(n);continue}if(r.cycle){a(n);continue}if(r.count>1&&e.reused===`ref`){a(n);continue}}e.external&&(e.sharedDefsExtractedFor=e.external)}function rh(e){let t=e.anyOf;if(!Array.isArray(t)||t.length===0||e.type!==void 0)return;let n=[];for(let e of t){if(!e||typeof e!=`object`)return;rh(e);let t=Object.keys(e);if(t.length!==1||t[0]!==`type`)return;let r=e.type;for(let e of Array.isArray(r)?r:[r]){if(typeof e!=`string`)return;n.includes(e)||n.push(e)}}delete e.anyOf,e.type=n.length===1?n[0]:n}var ih=new Set([`type`,`properties`,`required`,`additionalProperties`]),ah=[`oneOf`,`anyOf`];function oh(e){let t=e.additionalProperties;return t===void 0||t===!1||typeof t!=`object`||!t?null:Object.keys(t).length?t:null}function sh(e){let t=[];for(let n of e){if(typeof n!=`object`||n.type!==`object`)return null;for(let e in n)if(!ih.has(e))return null;t.push(n)}let n={},r=new Set;for(let e of t){for(let r in e.properties){if(Object.prototype.hasOwnProperty.call(n,r))continue;let e=[];for(let n of t){let t=n.properties?.[r]??oh(n);t!=null&&(e.some(e=>JSON.stringify(e)===JSON.stringify(t))||e.push(t))}Ol(n,r,e.length===1?e[0]:sh(e)??{allOf:e})}for(let t of e.required??[])r.add(t)}let i={type:`object`,properties:n};if(r.size&&(i.required=[...r]),t.every(e=>e.additionalProperties===!1))i.additionalProperties=!1;else{let e=[];for(let n of t){let t=oh(n);t&&!e.some(e=>JSON.stringify(e)===JSON.stringify(t))&&e.push(t)}e.length===1?i.additionalProperties=e[0]:e.length>1&&(i.additionalProperties={allOf:e})}return i}function ch(e){let t=e.allOf;if(!Array.isArray(t)||t.length<2)return;for(let t of ih)if(t in e)return;let n=t.filter(e=>ah.some(t=>Array.isArray(e[t]))),r=null;if(!n.length)r=sh(t);else{let e=n[0],i=ah.find(t=>Array.isArray(e[t]));if(Object.keys(e).length!==1)return;let a=t.filter(t=>t!==e),o=e[i].map(e=>sh([...a,e]));if(o.some(e=>!e))return;r={[i]:o}}r&&(delete e.allOf,Zm(e,r))}function lh(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=t=>{let n=e.seen.get(t);if(n.ref===null)return;let i=n.def??n.schema,a={...i},o=n.ref;if(n.ref=null,o){r(o);let n=e.seen.get(o),s=n.schema;if(s.$ref&&(e.target===`draft-07`||e.target===`draft-04`||e.target===`openapi-3.0`)?(i.allOf=i.allOf??[],i.allOf.push(s)):Zm(i,s),Zm(i,a),t._zod.parent===o)for(let e in i)e!==`$ref`&&e!==`allOf`&&(e in a||delete i[e]);if(s.$ref&&n.def)for(let e in i)e!==`$ref`&&e!==`allOf`&&e in n.def&&JSON.stringify(i[e])===JSON.stringify(n.def[e])&&delete i[e]}let s=t._zod.parent;if(s&&s!==o){r(s);let t=e.seen.get(s);if(t?.schema.$ref&&(i.$ref=t.schema.$ref,t.def))for(let e in i)e!==`$ref`&&e!==`allOf`&&e in t.def&&JSON.stringify(i[e])===JSON.stringify(t.def[e])&&delete i[e]}e.override({zodSchema:t,jsonSchema:i,path:n.path??[]})};if(!e.external||e.sharedEmitDoneFor!==e.external){for(let t of[...e.seen.entries()].reverse())r(t[0]);if(e.target!==`openapi-3.0`)for(let t of e.seen.entries())rh(t[1].def??t[1].schema);for(let t of e.deferred)t();if(e.intersections.length){let t=new Map;for(let n of e.seen.values())for(let e of[n.schema,n.def]){let n=e?.allOf;if(!Array.isArray(n))continue;let r=t.get(n);r?r.push(e):t.set(n,[e])}for(let n of e.intersections)for(let e of t.get(n)??[])ch(e)}}let i={};if(e.target===`draft-2020-12`?i.$schema=`https://json-schema.org/draft/2020-12/schema`:e.target===`draft-07`?i.$schema=`http://json-schema.org/draft-07/schema#`:e.target===`draft-04`?i.$schema=`http://json-schema.org/draft-04/schema#`:e.target,e.external?.uri){let n=e.external.registry.get(t)?.id;if(!n)throw Error("Schema is missing an `id` property");i.$id=e.external.uri(n)}Zm(i,n.defId?n.schema:n.def??n.schema);let a=e.metadataRegistry.get(t)?.id;a!==void 0&&i.id===a&&delete i.id;let o=e.external?.defs??{};if(!e.external||e.sharedEmitDoneFor!==e.external)for(let t of e.seen.entries()){let e=t[1];e.def&&e.defId&&(e.def.id===e.defId&&delete e.def.id,Ol(o,e.defId,e.def))}e.external&&(e.sharedEmitDoneFor=e.external),e.external||Object.keys(o).length>0&&(e.target===`draft-2020-12`?i.$defs=o:i.definitions=o);try{let n=JSON.parse(JSON.stringify(i));return Object.defineProperty(n,"~standard",{value:{...t[`~standard`],jsonSchema:{input:fh(t,`input`,e.processors),output:fh(t,`output`,e.processors)}},enumerable:!1,writable:!1}),n}catch{throw Error(`Error converting schema to JSON.`)}}function uh(e,t){let n=t??{seen:new Set};if(n.seen.has(e))return!1;n.seen.add(e);let r=e._zod.def;if(r.type===`transform`)return!0;if(r.type===`array`)return uh(r.element,n);if(r.type===`set`)return uh(r.valueType,n);if(r.type===`lazy`)return uh(r.getter(),n);if(r.type===`promise`||r.type===`optional`||r.type===`nonoptional`||r.type===`nullable`||r.type===`readonly`||r.type==="default"||r.type===`prefault`||r.type===`catch`)return uh(r.innerType,n);if(r.type===`intersection`)return uh(r.left,n)||uh(r.right,n);if(r.type===`record`||r.type===`map`)return uh(r.keyType,n)||uh(r.valueType,n);if(r.type===`pipe`)return e._zod.traits.has(`$ZodCodec`)?!0:uh(r.in,n)||uh(r.out,n);if(r.type===`object`){for(let e in r.shape)if(uh(r.shape[e],n))return!0;return!1}if(r.type===`union`){for(let e of r.options)if(uh(e,n))return!0;return!1}if(r.type===`tuple`){for(let e of r.items)if(uh(e,n))return!0;return!!(r.rest&&uh(r.rest,n))}return!1}var dh=(e,t={})=>n=>{let r=Qm({...n,processors:t});return eh(e,r),nh(r,e),lh(r,e)},fh=(e,t,n={})=>r=>{let{libraryOptions:i,target:a}=r??{},o=Qm({...i??{},target:a,io:t,processors:n});return eh(e,o),nh(o,e),lh(o,e)},ph={guid:`uuid`,url:`uri`,datetime:`date-time`,json_string:`json-string`,regex:``},mh=(e,t,n,r)=>{let i=n;i.type=`string`;let{minimum:a,maximum:o,format:s,patterns:c,contentEncoding:l,laxFormat:u}=e._zod.bag;if(typeof a==`number`&&(i.minLength=a),typeof o==`number`&&(i.maxLength=o),s&&(i.format=ph[s]??s,i.format===``&&delete i.format,(s===`time`||u)&&delete i.format),l&&(i.contentEncoding=l),c&&c.size>0){let e=[...c];e.length===1?i.pattern=e[0].source:e.length>1&&(i.allOf=[...e.map(e=>({...t.target===`draft-07`||t.target===`draft-04`||t.target===`openapi-3.0`?{type:`string`}:{},pattern:e.source}))])}},hh=(e,t,n,r)=>{let i=n,{minimum:a,maximum:o,format:s,multipleOf:c,exclusiveMaximum:l,exclusiveMinimum:u}=e._zod.bag;i.type=typeof s==`string`&&s.includes(`int`)?`integer`:`number`;let d=typeof u==`number`&&u>=(a??-1/0),f=typeof l==`number`&&l<=(o??1/0),p=t.target===`draft-04`||t.target===`openapi-3.0`;d?p?(i.minimum=u,i.exclusiveMinimum=!0):i.exclusiveMinimum=u:typeof a==`number`&&(i.minimum=a),f?p?(i.maximum=l,i.exclusiveMaximum=!0):i.exclusiveMaximum=l:typeof o==`number`&&(i.maximum=o),typeof c==`number`&&(Number.isFinite(c)&&c!==0?i.multipleOf=Math.abs(c):$m(e,t,i,r,`A multipleOf divisor of ${c} cannot be represented in JSON Schema`))},gh=(e,t,n,r)=>{n.type=`boolean`},_h=(e,t,n,r)=>{t.target===`openapi-3.0`?(n.type=`string`,n.nullable=!0,n.enum=[null]):n.type=`null`},vh=(e,t,n,r)=>{n.not={}},yh=(e,t,n,r)=>{let i=e._zod.def,a=yl(i.entries);if(a.length===0){n.not={};return}a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),n.enum=a},bh=(e,t,n,r)=>{let i=e._zod.def;if(i.values.length===0){n.not={};return}let a=[];for(let o of i.values)if(o===void 0){if($m(e,t,n,r,"Literal `undefined` cannot be represented in JSON Schema"))return}else if(typeof o==`bigint`){if($m(e,t,n,r,`BigInt literals cannot be represented in JSON Schema`))return;a.push(Number(o))}else a.push(o);if(a.length!==0){if(a.length===1){let e=a[0];n.type=e===null?`null`:typeof e,t.target===`draft-04`||t.target===`openapi-3.0`?n.enum=[e]:n.const=e}else a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),a.every(e=>typeof e==`boolean`)&&(n.type=`boolean`),a.every(e=>e===null)&&(n.type=`null`),n.enum=a}},xh=(e,t,n,r)=>{$m(e,t,n,r,`Custom types cannot be represented in JSON Schema`)},Sh=(e,t,n,r)=>{$m(e,t,n,r,`Transforms cannot be represented in JSON Schema`)},Ch=(e,t,n,r)=>{let i=n,a=e._zod.def,{minimum:o,maximum:s}=e._zod.bag;typeof o==`number`&&(i.minItems=o),typeof s==`number`&&(i.maxItems=s),i.type=`array`,i.items=eh(a.element,t,{...r,path:[...r.path,`items`]})};function wh(e){let t=e._zod.def;return t.type===`pipe`&&t.in._zod.traits.has(`$ZodTransform`)?wh(t.out):t.type===`catch`?wh(t.innerType):e._zod.optin}var Th=(e,t,n,r)=>{let i=n,a=e._zod.def,o=a.shape;if(Object.getOwnPropertySymbols(o).length&&$m(e,t,i,r,`Symbol keys cannot be represented in JSON Schema`))return;i.type=`object`,i.properties={};for(let e in o)Ol(i.properties,e,eh(o[e],t,{...r,path:[...r.path,`properties`,e]}));let s=new Set(Object.keys(o)),c=new Set([...s].filter(e=>{let n=a.shape[e];return t.io===`input`?wh(n)===void 0:n._zod.optout===void 0}));c.size>0&&(i.required=Array.from(c)),a.catchall?._zod.def.type===`never`?i.additionalProperties=!1:a.catchall?a.catchall&&(i.additionalProperties=eh(a.catchall,t,{...r,path:[...r.path,`additionalProperties`]})):t.io===`output`&&(i.additionalProperties=!1)},Eh=(e,t,n,r)=>{let i=e._zod.def,a=i.inclusive===!1,o=i.options.map((e,n)=>eh(e,t,{...r,path:[...r.path,a?`oneOf`:`anyOf`,n]}));a?n.oneOf=o:n.anyOf=o},Dh=(e,t,n,r)=>{let i=e._zod.def,a=eh(i.left,t,{...r,path:[...r.path,`allOf`,0]}),o=eh(i.right,t,{...r,path:[...r.path,`allOf`,1]}),s=e=>`allOf`in e&&Object.keys(e).length===1,c=[...s(a)?a.allOf:[a],...s(o)?o.allOf:[o]];n.allOf=c,t.intersections.push(c)},Oh=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`array`;let o=t.target===`draft-2020-12`?`prefixItems`:`items`,s=t.target===`draft-2020-12`||t.target===`openapi-3.0`?`items`:`additionalItems`,c=a.items.map((e,n)=>eh(e,t,{...r,path:[...r.path,o,n]})),l=a.rest?eh(a.rest,t,{...r,path:[...r.path,s,...t.target===`openapi-3.0`?[a.items.length]:[]]}):null,u=a.items.length;for(;u>0;){let e=a.items[u-1];if(!(t.io===`input`?wh(e)!==void 0:e._zod.optout===`optional`))break;u--}let d=a.items.length,f=!a.rest;t.target===`draft-2020-12`?(i.prefixItems=c,f?i.items=!1:l&&(i.items=l),u>0&&(i.minItems=u),f&&(i.maxItems=d)):t.target===`openapi-3.0`?(i.items={anyOf:c},l&&i.items.anyOf.push(l),u>0&&(i.minItems=u),f&&(i.maxItems=d)):(i.items=c,f?i.additionalItems=!1:l&&(i.additionalItems=l),u>0&&(i.minItems=u),f&&(i.maxItems=d));let{minimum:p,maximum:m}=e._zod.bag;typeof p==`number`&&(i.minItems=p),typeof m==`number`&&(i.maxItems=m)};function kh(e,t,n){if(t.$ref){if(n.has(t))return t;n.add(t);let r=e.get(t)?.def;if(!r)return t;let i=kh(e,r,n);return i===r?t:i}for(let r of[`anyOf`,`oneOf`]){let i=t[r];if(!Array.isArray(i))continue;let a=i.map(t=>kh(e,t,n));a.some((e,t)=>e!==i[t])&&(t={...t,[r]:a})}let r=Array.isArray(t.type)?t.type:[t.type],i=!r.includes(`string`)&&r.some(e=>e===`number`||e===`integer`),a=t.enum??(t.const===void 0?void 0:[t.const]);if(!i&&!a?.some(e=>typeof e==`number`))return t;let{minimum:o,maximum:s,exclusiveMinimum:c,exclusiveMaximum:l,multipleOf:u,format:d,id:f,...p}=t;return p.enum?p.enum=p.enum.map(e=>typeof e==`number`?String(e):e):typeof p.const==`number`&&(p.const=String(p.const)),i?(p.type=`string`,a||(p.pattern=(r.includes(`number`)?G:Ed).source),p):p}var Ah=new WeakMap;function jh(e){let t=new Map;for(let n of e.seen.values())n.def&&!t.has(n.schema)&&t.set(n.schema,n);let n=new Map;for(let r of Ah.get(e)??[]){let i=e.seen.get(r),a=(i?.def??i?.schema)?.propertyNames;if(!a||a===!0||n.has(a))continue;let o=kh(t,a,new Set);o!==a&&n.set(a,o)}if(n.size)for(let t of e.seen.values())for(let e of[t.schema,t.def]){let t=e&&n.get(e.propertyNames);t&&(e.propertyNames=t)}}var Mh=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`object`;let o=a.keyType,s=o._zod.bag?.patterns;if(a.mode===`loose`&&s&&s.size>0){let e=eh(a.valueType,t,{...r,path:[...r.path,`patternProperties`,`*`]});i.patternProperties={};for(let t of s)Ol(i.patternProperties,t.source,e)}else{if(t.target===`draft-07`||t.target===`draft-2020-12`){i.propertyNames=eh(a.keyType,t,{...r,path:[...r.path,`propertyNames`]});let n=Ah.get(t);n||(n=[],Ah.set(t,n),t.deferred.push(()=>jh(t))),n.push(e)}i.additionalProperties=eh(a.valueType,t,{...r,path:[...r.path,`additionalProperties`]})}let c=o._zod.values,l=t.io===`input`&&wh(a.valueType)!==void 0;if(c&&!a.partial&&!l){let e=[...c].filter(e=>typeof e==`string`||typeof e==`number`);e.length>0&&(i.required=e.map(String))}},Nh=(e,t,n,r)=>{let i=e._zod.def,a=eh(i.innerType,t,r),o=t.seen.get(e);t.target===`openapi-3.0`?(o.ref=i.innerType,n.nullable=!0):n.anyOf=[a,{type:`null`}]},Ph=(e,t,n,r)=>{let i=e._zod.def;eh(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},Fh=Symbol();function Ih(e,t,n,r,i){let a=!1,o=JSON.stringify(e,(e,t)=>typeof t==`bigint`?(a=!0,null):t);return a?($m(t,n,r,i,`BigInt defaults cannot be represented in JSON Schema`),Fh):JSON.parse(o)}var Lh=(e,t,n,r)=>{let i=e._zod.def;eh(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o=Ih(i.defaultValue,e,t,n,r);o!==Fh&&(n.default=o)},Rh=(e,t,n,r)=>{let i=e._zod.def;eh(i.innerType,t,r);let a=t.seen.get(e);if(a.ref=i.innerType,t.io!==`input`)return;let o=Ih(i.defaultValue,e,t,n,r);o!==Fh&&(n._prefault=o)},zh=(e,t,n,r)=>{let i=e._zod.def;eh(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o;try{o=i.catchValue(void 0)}catch{$m(e,t,n,r,`Dynamic catch values are not supported in JSON Schema`);return}n.default=o},Bh=(e,t,n,r)=>{let i=e._zod.def,a=i.in._zod.traits.has(`$ZodTransform`),o=t.io===`input`?a?i.out:i.in:i.out;eh(o,t,r);let s=t.seen.get(e);s.ref=o},Vh=(e,t,n,r)=>{let i=e._zod.def;eh(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.readOnly=!0},Hh=(e,t,n,r)=>{let i=e._zod.def;eh(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},Uh=(e,t,n,r)=>{let i=e._zod.innerType;eh(i,t,r);let a=t.seen.get(e);a.ref=i},Wh=new WeakSet([Object.prototype,Error.prototype]);function Gh(e,t,n){Object.defineProperty(e,t,{configurable:!0,enumerable:!1,get(){let e=n(this);return Object.defineProperty(this,t,{value:e,configurable:!0,writable:!0}),e},set(e){Object.defineProperty(this,t,{value:e,configurable:!0,writable:!0})}})}var Kh=W(`ZodError`,(e,t)=>{Mu.init(e,t),e.name=`ZodError`;let n=Object.getPrototypeOf(e);Wh.has(n)||(Wh.add(n),Gh(n,`format`,e=>t=>Iu(e,t)),Gh(n,`flatten`,e=>t=>Fu(e,t)),Gh(n,`addIssue`,e=>t=>{e.issues.push(t),e.message=JSON.stringify(e.issues,xl,2)}),Gh(n,`addIssues`,e=>t=>{e.issues.push(...t),e.message=JSON.stringify(e.issues,xl,2)}),Object.defineProperty(n,"isEmpty",{configurable:!0,enumerable:!1,get(){return this.issues.length===0}}))},void 0,{Parent:Error}),qh=Ru(Kh),Jh=zu(Kh),Yh=Bu(Kh),Xh=Hu(Kh),Zh=Wu(Kh),Qh=Gu(Kh),$h=Ku(Kh),eg=qu(Kh),tg=Ju(Kh),ng=Yu(Kh),rg=Xu(Kh),ig=Zu(Kh);function ag(){Cu.localeError||wu(Up())}function og(){Cu.memoizer||wu({memoizer:Bp()})}var sg=W(`ZodType`,(e,t)=>(ag(),Zd.init(e,t),e.def=t,e.type=t.type,e),{check(...e){let t=this.def;return this.clone(kl(t,{checks:[...t.checks??[],...e.map(e=>typeof e==`function`?{_zod:{check:e,def:{check:`custom`},onattach:[]}}:e)]}),{parent:!0})},with(...e){return this.check(...e)},clone(e,t){return zl(this,e,t)},brand(){return this},register(e,t){return e.add(this,t),this},refine(e,t){return this.check(A_(e,t))},superRefine(e,t){return this.check(j_(e,t))},overwrite(e){return this.check(Vm(e))},optional(){return d_(this)},exactOptional(){return p_(this)},nullable(){return h_(this)},nullish(){return d_(h_(this))},nonoptional(e){return x_(this,e)},array(){return Kg(this)},or(e){return Xg([this,e])},and(e){return e_(this,e)},transform(e){return T_(this,l_(e))},default(e){return __(this,e)},prefault(e){return y_(this,e)},catch(e){return C_(this,e)},pipe(e){return T_(this,e)},readonly(){return D_(this)},describe(e){let t=this.clone();return qp.add(t,{description:e}),t},meta(...e){if(e.length===0)return qp.get(this);let t=this.clone();return qp.add(t,e[0]),t},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(e,...t){return t.length===0?e(this):e(this,...t)},get"~standard"(){return cu(this,`~standard`,{...$d(this),jsonSchema:{input:fh(this,`input`),output:fh(this,`output`)}})},set"~standard"(e){su(this,`~standard`,e)},parse:function e(t,n){return qh(this,t,n,{callee:e})},parseAsync:async function e(t,n){return await Jh(this,t,n,{callee:e})},safeParse(e,t){return Yh(this,e,t)},async safeParseAsync(e,t){return Xh(this,e,t)},get spa(){return this?.safeParseAsync},set spa(e){su(this,`spa`,e)},encode:function e(t,n){return Zh(this,t,n,{callee:e})},decode:function e(t,n){return Qh(this,t,n,{callee:e})},encodeAsync:async function e(t,n){return await $h(this,t,n,{callee:e})},decodeAsync:async function e(t,n){return await eg(this,t,n,{callee:e})},safeEncode(e,t){return tg(this,e,t)},safeDecode(e,t){return ng(this,e,t)},async safeEncodeAsync(e,t){return rg(this,e,t)},async safeDecodeAsync(e,t){return ig(this,e,t)},toJSONSchema(e){return dh(this,{})(e)},get description(){return qp.get(this)?.description},get _def(){return this._zod.def}}),cg=W(`_ZodString`,(e,t)=>{ef.init(e,t),sg.init(e,t),e._zod.processJSONSchema=(t,n,r)=>mh(e,t,n,r);let n=e._zod.bag;e.format=n.format??null,e.minLength=n.minimum??null,e.maxLength=n.maximum??null},{regex(...e){return this.check(Fm(...e))},includes(...e){return this.check(Rm(...e))},startsWith(...e){return this.check(zm(...e))},endsWith(...e){return this.check(Bm(...e))},min(...e){return this.check(Nm(...e))},max(...e){return this.check(Mm(...e))},length(...e){return this.check(Pm(...e))},nonempty(...e){return this.check(Nm(1,...e))},lowercase(e){return this.check(Im(e))},uppercase(e){return this.check(Lm(e))},trim(){return this.check(Um())},normalize(...e){return this.check(Hm(...e))},toLowerCase(){return this.check(Wm())},toUpperCase(){return this.check(Gm())},slugify(){return this.check(Km())}}),lg=W(`ZodString`,(e,t)=>{ef.init(e,t),cg.init(e,t)},{email(e){return this.check(Yp(hg,e))},url(e){return this.check(tm(vg,e))},jwt(e){return this.check(gm(Ng,e))},emoji(e){return this.check(nm(yg,e))},guid(e){return this.check(Xp(gg,e))},uuid(e){return this.check(Zp(_g,e))},uuidv4(e){return this.check(Qp(_g,e))},uuidv6(e){return this.check($p(_g,e))},uuidv7(e){return this.check(em(_g,e))},nanoid(e){return this.check(rm(bg,e))},cuid(e){return this.check(im(xg,e))},cuid2(e){return this.check(am(Sg,e))},ulid(e){return this.check(om(Cg,e))},base64(e){return this.check(pm(Ag,e))},base64url(e){return this.check(mm(jg,e))},xid(e){return this.check(sm(wg,e))},ksuid(e){return this.check(cm(Tg,e))},ipv4(e){return this.check(lm(Eg,e))},ipv6(e){return this.check(um(Dg,e))},cidrv4(e){return this.check(dm(Og,e))},cidrv6(e){return this.check(fm(kg,e))},e164(e){return this.check(hm(Mg,e))},datetime(e){return this.check(_m(dg,e))},date(e){return this.check(vm(fg,e))},time(e){return this.check(ym(pg,e))},duration(e){return this.check(bm(mg,e))}});function K(e){return Jp(lg,e)}var ug=W(`ZodStringFormat`,(e,t)=>{tf.init(e,t),cg.init(e,t)}),dg=W(`ZodISODateTime`,(e,t)=>{yf.init(e,t),ug.init(e,t)}),fg=W(`ZodISODate`,(e,t)=>{bf.init(e,t),ug.init(e,t)}),pg=W(`ZodISOTime`,(e,t)=>{xf.init(e,t),ug.init(e,t)}),mg=W(`ZodISODuration`,(e,t)=>{Sf.init(e,t),ug.init(e,t)}),hg=W(`ZodEmail`,(e,t)=>{af.init(e,t),ug.init(e,t)}),gg=W(`ZodGUID`,(e,t)=>{nf.init(e,t),ug.init(e,t)}),_g=W(`ZodUUID`,(e,t)=>{rf.init(e,t),ug.init(e,t)}),vg=W(`ZodURL`,(e,t)=>{df.init(e,t),ug.init(e,t)}),yg=W(`ZodEmoji`,(e,t)=>{ff.init(e,t),ug.init(e,t)}),bg=W(`ZodNanoID`,(e,t)=>{pf.init(e,t),ug.init(e,t)}),xg=W(`ZodCUID`,(e,t)=>{mf.init(e,t),ug.init(e,t)}),Sg=W(`ZodCUID2`,(e,t)=>{hf.init(e,t),ug.init(e,t)}),Cg=W(`ZodULID`,(e,t)=>{gf.init(e,t),ug.init(e,t)}),wg=W(`ZodXID`,(e,t)=>{_f.init(e,t),ug.init(e,t)}),Tg=W(`ZodKSUID`,(e,t)=>{vf.init(e,t),ug.init(e,t)}),Eg=W(`ZodIPv4`,(e,t)=>{Cf.init(e,t),ug.init(e,t)}),Dg=W(`ZodIPv6`,(e,t)=>{Ef.init(e,t),ug.init(e,t)}),Og=W(`ZodCIDRv4`,(e,t)=>{Df.init(e,t),ug.init(e,t)}),kg=W(`ZodCIDRv6`,(e,t)=>{kf.init(e,t),ug.init(e,t)}),Ag=W(`ZodBase64`,(e,t)=>{jf.init(e,t),ug.init(e,t)}),jg=W(`ZodBase64URL`,(e,t)=>{Nf.init(e,t),ug.init(e,t)}),Mg=W(`ZodE164`,(e,t)=>{Pf.init(e,t),ug.init(e,t)}),Ng=W(`ZodJWT`,(e,t)=>{If.init(e,t),ug.init(e,t)}),Pg=W(`ZodNumber`,(e,t)=>{Lf.init(e,t),sg.init(e,t),e._zod.processJSONSchema=(t,n,r)=>hh(e,t,n,r);let n=e._zod.bag;e.minValue=Math.max(n.minimum??-1/0,n.exclusiveMinimum??-1/0)??null,e.maxValue=Math.min(n.maximum??1/0,n.exclusiveMaximum??1/0)??null,e.isInt=(n.format??``).includes(`int`)||Number.isSafeInteger(n.multipleOf??.5),e.isFinite=!0,e.format=n.format??null},{gt(e,t){return this.check(km(e,t))},gte(e,t){return this.check(Am(e,t))},min(e,t){return this.check(Am(e,t))},lt(e,t){return this.check(Dm(e,t))},lte(e,t){return this.check(Om(e,t))},max(e,t){return this.check(Om(e,t))},int(e){return this.check(Ig(e))},safe(e){return this.check(Ig(e))},positive(e){return this.check(km(0,e))},nonnegative(e){return this.check(Am(0,e))},negative(e){return this.check(Dm(0,e))},nonpositive(e){return this.check(Om(0,e))},multipleOf(e,t){return this.check(jm(e,t))},step(e,t){return this.check(jm(e,t))},finite(){return this}});function q(e){return xm(Pg,e)}var Fg=W(`ZodNumberFormat`,(e,t)=>{Rf.init(e,t),Pg.init(e,t)});function Ig(e){return Sm(Fg,e)}var Lg=W(`ZodBoolean`,(e,t)=>{zf.init(e,t),sg.init(e,t),e._zod.processJSONSchema=(t,n,r)=>gh(e,t,n,r)});function Rg(e){return Cm(Lg,e)}var zg=W(`ZodNull`,(e,t)=>{Bf.init(e,t),sg.init(e,t),e._zod.processJSONSchema=(t,n,r)=>_h(e,t,n,r)});function Bg(e){return wm(zg,e)}var Vg=W(`ZodUnknown`,(e,t)=>{Vf.init(e,t),sg.init(e,t),e._zod.processJSONSchema=(e,t,n)=>void 0});function Hg(){return Tm(Vg)}var Ug=W(`ZodNever`,(e,t)=>{Hf.init(e,t),sg.init(e,t),e._zod.processJSONSchema=(t,n,r)=>vh(e,t,n,r)});function Wg(e){return Em(Ug,e)}var Gg=W(`ZodArray`,(e,t)=>{og(),Wf.init(e,t),sg.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ch(e,t,n,r),e.element=t.element},{min(e,t){return this.check(Nm(e,t))},nonempty(e){return this.check(Nm(1,e))},max(e,t){return this.check(Mm(e,t))},length(e,t){return this.check(Pm(e,t))},unwrap(){return this.element}});function Kg(e,t){return qm(Gg,e,t)}var qg=W(`ZodObject`,(e,t)=>{og(),Zf.init(e,t),sg.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Th(e,t,n,r),mu(e,`shape`,e=>e._zod.def.shape,!1)},{keyof(){return o_(Object.keys(this._zod.def.shape))},catchall(e){return this.clone({...this._zod.def,catchall:e})},passthrough(){return this.clone({...this._zod.def,catchall:Hg()})},loose(){return this.clone({...this._zod.def,catchall:Hg()})},strict(){return this.clone({...this._zod.def,catchall:Wg()})},strip(){return this.clone({...this._zod.def,catchall:void 0})},extend(e){return H(this,e)},safeExtend(e){return Gl(this,e)},merge(e){return Kl(this,e)},pick(e){return Ul(this,e)},omit(e){return Wl(this,e)},partial(...e){return ql(u_,this,e[0])},exactPartial(...e){return ql(f_,this,e[0],`exactPartial`)},required(...e){return Jl(b_,this,e[0])}});function J(e,t){return new qg({type:`object`,shape:e??{},...V(t)})}function Jg(e,t){return new qg({type:`object`,shape:e,catchall:Wg(),...V(t)})}var Yg=W(`ZodUnion`,(e,t)=>{$f.init(e,t),sg.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Eh(e,t,n,r),e.options=t.options});function Xg(e,t){return new Yg({type:`union`,options:e,...V(t)})}var Zg=W(`ZodDiscriminatedUnion`,(e,t)=>{Yg.init(e,t),ep.init(e,t)});function Qg(e,t,n){return new Zg({type:`union`,options:t,discriminator:e,...V(n)})}var $g=W(`ZodIntersection`,(e,t)=>{tp.init(e,t),sg.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Dh(e,t,n,r)});function e_(e,t){return new $g({type:`intersection`,left:e,right:t})}var t_=W(`ZodTuple`,(e,t)=>{og(),ip.init(e,t),sg.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Oh(e,t,n,r)},{rest(e){return this.clone({...this._zod.def,rest:e})},partial(){let e=this._zod.def;if(e.checks?.length)throw Error(`.partial() cannot be used on tuple schemas containing refinements`);return this.clone({...e,items:e.items.map(e=>new u_({type:`optional`,innerType:e}))})}});function n_(e,t,n){let r=t instanceof Zd;return new t_({type:`tuple`,items:e,rest:r?t:null,...V(r?n:t)})}var r_=W(`ZodRecord`,(e,t)=>{og(),cp.init(e,t),sg.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Mh(e,t,n,r),e.keyType=t.keyType,e.valueType=t.valueType});function i_(e,t,n){return!t||!t._zod?new r_({type:`record`,keyType:K(),valueType:e,...V(t)}):new r_({type:`record`,keyType:e,valueType:t,...V(n)})}var a_=W(`ZodEnum`,(e,t)=>{lp.init(e,t),sg.init(e,t),e._zod.processJSONSchema=(t,n,r)=>yh(e,t,n,r),e.enum=t.entries,e.options=Object.values(t.entries);let n=new Set(Object.keys(t.entries));e.extract=(e,r)=>{let i={};for(let r of e)if(n.has(r))i[r]=t.entries[r];else throw Error(`Key ${r} not found in enum`);return new a_({...t,checks:[],...V(r),entries:i})},e.exclude=(e,r)=>{let i={...t.entries};for(let t of e)if(n.has(t))delete i[t];else throw Error(`Key ${t} not found in enum`);return new a_({...t,checks:[],...V(r),entries:i})}});function o_(e,t){return new a_({type:`enum`,entries:Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e,...V(t)})}var s_=W(`ZodLiteral`,(e,t)=>{up.init(e,t),sg.init(e,t),e._zod.processJSONSchema=(t,n,r)=>bh(e,t,n,r),e.values=new Set(t.values),Object.defineProperty(e,"value",{get(){if(t.values.length>1)throw Error("This schema contains multiple valid literal values. Use `.values` instead.");return t.values[0]}})});function Y(e,t){return new s_({type:`literal`,values:Array.isArray(e)?e:[e],...V(t)})}var c_=W(`ZodTransform`,(e,t)=>{og(),dp.init(e,t),sg.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Sh(e,t,n,r),e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new Su(e.constructor.name);n.addIssue=r=>{if(typeof r==`string`)n.issues.push(au(r,n.value,t));else{let t=r;t.fatal&&(t.continue=!1),t.code??=`custom`,`input`in t||(t.input=n.value),t.inst??=e,n.issues.push(au(t))}};let i=t.transform(n.value,n);return i instanceof Promise?i.then(e=>(n.value=e,n)):(n.value=i,n)}});function l_(e){return new c_({type:`transform`,transform:e})}var u_=W(`ZodOptional`,(e,t)=>{pp.init(e,t),sg.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Hh(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function d_(e){return new u_({type:`optional`,innerType:e})}var f_=W(`ZodExactOptional`,(e,t)=>{mp.init(e,t),sg.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Hh(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function p_(e){return new f_({type:`optional`,innerType:e})}var m_=W(`ZodNullable`,(e,t)=>{hp.init(e,t),sg.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Nh(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function h_(e){return new m_({type:`nullable`,innerType:e})}var g_=W(`ZodDefault`,(e,t)=>{gp.init(e,t),sg.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Lh(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function __(e,t){return new g_({type:`default`,innerType:e,get defaultValue(){return typeof t==`function`?t():Il(t)}})}var v_=W(`ZodPrefault`,(e,t)=>{vp.init(e,t),sg.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Rh(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function y_(e,t){return new v_({type:`prefault`,innerType:e,get defaultValue(){return typeof t==`function`?t():Il(t)}})}var b_=W(`ZodNonOptional`,(e,t)=>{yp.init(e,t),sg.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ph(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function x_(e,t){return new b_({type:`nonoptional`,innerType:e,...V(t)})}var S_=W(`ZodCatch`,(e,t)=>{Sp.init(e,t),sg.init(e,t),e._zod.processJSONSchema=(t,n,r)=>zh(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function C_(e,t){return new S_({type:`catch`,innerType:e,catchValue:typeof t==`function`?t:gu(t)})}var w_=W(`ZodPipe`,(e,t)=>{Cp.init(e,t),sg.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Bh(e,t,n,r),e.in=t.in,e.out=t.out});function T_(e,t){return new w_({type:`pipe`,in:e,out:t})}var E_=W(`ZodReadonly`,(e,t)=>{Tp.init(e,t),sg.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Vh(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function D_(e){return new E_({type:`readonly`,innerType:e})}var O_=W(`ZodLazy`,(e,t)=>{Dp.init(e,t),sg.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Uh(e,t,n,r),e.unwrap=()=>e._zod.def.getter()});function X(e){return new O_({type:`lazy`,getter:e})}var k_=W(`ZodCustom`,(e,t)=>{Op.init(e,t),sg.init(e,t),e._zod.processJSONSchema=(t,n,r)=>xh(e,t,n,r)});function A_(e,t={}){return Jm(k_,e,t)}function j_(e,t){return Ym(e,t)}function Z(e,t={}){let n=new k_({type:`custom`,check:`custom`,fn:t=>t instanceof e,abort:!0,...V(t)});return n._zod.bag.Class=e,n._zod.check=t=>{t.value instanceof e||t.issues.push({code:`invalid_type`,expected:e.name,input:t.value,inst:n,path:[...n._zod.def.path??[]]})},n}var M_=X(()=>Z(Uint8Array).refine(e=>e.length===16,{message:`expected exactly 16 bytes`})),N_=X(()=>J({verb:Y(`bulk.open`),"transfer-id":X(()=>M_),"total-size":q().int().nonnegative().optional(),"content-type":K().optional()}).catchall(Hg())),P_=X(()=>J({verb:Y(`bulk.resume`),"transfer-id":X(()=>M_),"ack-seq":q().int().nonnegative()}).catchall(Hg())),F_=X(()=>J({verb:Y(`bulk.cancel`),"transfer-id":X(()=>M_),reason:K().optional()}).catchall(Hg())),I_=X(()=>Xg([Xg([X(()=>N_),X(()=>P_),X(()=>F_)]),Xg([X(()=>U_),X(()=>W_),X(()=>G_),X(()=>K_),X(()=>q_),X(()=>J_),X(()=>Y_),X(()=>X_)]),J({}).catchall(Hg()),X(()=>fv),X(()=>mv),X(()=>_v),X(()=>vv),Xg([X(()=>Sv),X(()=>Cv),X(()=>wv),X(()=>Tv)]),Xg([X(()=>Dv),X(()=>Ov)]),X(()=>kv),Xg([X(()=>Vv),X(()=>Hv),X(()=>Uv)]),Xg([X(()=>Wv),X(()=>Gv),X(()=>Kv)]),X(()=>_y),Xg([X(()=>by),X(()=>xy),X(()=>Sy),X(()=>vy)])])),L_=X(()=>J({type:Y(`bulk-data`),"transfer-id":X(()=>M_),seq:q().int().nonnegative(),bytes:Z(Uint8Array)})),R_=X(()=>J({type:Y(`bulk-ack`),"transfer-id":X(()=>M_),"ack-seq":q().int().nonnegative(),window:q().int().nonnegative()})),z_=X(()=>J({type:Y(`bulk-end`),"transfer-id":X(()=>M_),digest:Z(Uint8Array)})),B_=X(()=>J({type:Y(`data-have`),peer:X(()=>ov),"head-seq":q().int().nonnegative()})),V_=X(()=>J({type:Y(`data-request`),peer:X(()=>ov),"from-seq":q().int().nonnegative()})),H_=X(()=>J({type:Y(`data-entries`),peer:X(()=>ov),"from-seq":q().int().nonnegative(),entries:Kg(Z(Uint8Array))}));X(()=>J({handle:K(),"device-id":X(()=>ov),"identity-key":X(()=>av),candidates:Kg(X(()=>cy)).optional(),mailboxes:Kg(X(()=>ov)).optional(),issued:q().int().nonnegative(),expires:q().int().nonnegative()})),X(()=>X(()=>$v));var U_=X(()=>J({verb:Y(`pty.spawn`),shell:K().optional(),argv:Kg(K()),cwd:K().optional(),env:J({}).catchall(K()),cols:q().int().nonnegative(),rows:q().int().nonnegative()})),W_=X(()=>J({verb:Y(`pty.write`),session:X(()=>Pv),bytes:Z(Uint8Array)})),G_=X(()=>J({verb:Y(`pty.resize`),session:X(()=>Pv),cols:q().int().nonnegative(),rows:q().int().nonnegative()})),K_=X(()=>J({verb:Y(`pty.kill`),session:X(()=>Pv),signal:q().int()})),q_=X(()=>J({verb:Y(`proc.spawn`),argv:Kg(K()),cwd:K().optional(),env:J({}).catchall(K())})),J_=X(()=>J({verb:Y(`proc.signal`),session:X(()=>Pv),signal:q().int()})),Y_=X(()=>J({verb:Y(`proc.kill`),session:X(()=>Pv)})),X_=X(()=>J({verb:Y(`exec.list`)}));X(()=>J({session:X(()=>Pv),kind:Xg([Y(`pty`),Y(`proc`)]),argv:Kg(K()).optional(),cwd:K().optional()}));var Z_=X(()=>Xg([X(()=>iv),X(()=>ny),X(()=>ry),X(()=>iy),X(()=>oy),X(()=>ly),X(()=>uy),X(()=>dy),X(()=>fy),X(()=>py),X(()=>my),X(()=>hy),X(()=>gy),X(()=>cv),X(()=>dv),X(()=>gv),X(()=>Fv),X(()=>Iv),X(()=>Lv),X(()=>B_),X(()=>V_),X(()=>H_),X(()=>L_),X(()=>R_),X(()=>z_)])),Q_=X(()=>X(()=>Z_)),$_=X(()=>q().int().nonnegative()),ev=X(()=>Xg([X(()=>tv),X(()=>nv),X(()=>rv)])),tv=X(()=>Xg([Y(`core/management`),Y(`core/exec`),Y(`core/data`),Y(`core/federation`),Y(`core/webrtc`),Y(`core/room`),Y(`core/bulk`),Y(`core/version`)])),nv=X(()=>K().regex(RegExp(`[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+/[A-Za-z0-9_.-]+`))),rv=X(()=>K().regex(RegExp(`x-[A-Za-z0-9_.-]+`))),iv=X(()=>J({type:Y(`handshake`),version:X(()=>$_),domains:Kg(X(()=>ev)),params:J({}).catchall(Hg()).optional()})),av=X(()=>J({alg:q().int(),"public-key":Z(Uint8Array)})),ov=X(()=>Z(Uint8Array).refine(e=>e.length===32,{message:`expected exactly 32 bytes`}));X(()=>J({"device-id":X(()=>ov),"identity-key":X(()=>av),certificate:Z(Uint8Array).optional()}));var sv=X(()=>J({verb:X(()=>qv),params:X(()=>I_)})),cv=X(()=>J({type:Y(`manage-request`),"request-id":q().int().nonnegative(),command:X(()=>sv),scope:X(()=>Zv),token:X(()=>ey).optional()})),lv=X(()=>J({result:Y(`ok`)}).catchall(Hg())),uv=X(()=>J({result:Y(`error`),code:K(),message:K().optional()})),dv=X(()=>J({type:Y(`manage-response`),"request-id":q().int().nonnegative(),outcome:Xg([X(()=>lv),X(()=>uv)])})),fv=X(()=>J({verb:Y(`capability.request`),capability:K(),"valid-until":q().int().nonnegative().optional()}).catchall(Hg())),pv=X(()=>J({result:Y(`ok`),"granted-token":X(()=>ey)}).catchall(Hg())),mv=X(()=>J({verb:Y(`capability.grant`),"granted-token":X(()=>ey)}).catchall(Hg()));X(()=>J({"token-id":Z(Uint8Array),issuer:X(()=>ov),"issuer-key":X(()=>av),"revoked-at":q().int().nonnegative(),authorization:Z(Uint8Array).optional()}));var hv=X(()=>X(()=>$v)),gv=X(()=>J({type:Y(`revocation-announce`),entries:Kg(X(()=>hv))})),_v=X(()=>J({verb:Y(`path.trace`)}));X(()=>J({result:Y(`ok`),relayed:Rg(),"hub-address":K().optional()}).catchall(Hg())),X(()=>J({direct:Kg(X(()=>ov)),relayed:Kg(J({device:X(()=>ov),via:X(()=>ov).optional()}))}));var vv=X(()=>J({verb:Y(`topology.get`)})),yv=X(()=>Xg([X(()=>bv),X(()=>xv)]));X(()=>K().regex(RegExp(`[0-9a-f]{64}`)));var bv=X(()=>K().regex(RegExp(`[0-9a-f]{64}/[A-Za-z0-9_-]+`))),xv=X(()=>K().regex(RegExp(`[0-9a-f]{64}\\+[0-9a-f]{64}`))),Sv=X(()=>J({verb:Y(`room.send`),"message-id":Z(Uint8Array),"sent-at":q().int().nonnegative(),text:K(),"content-type":K().optional(),refs:Kg(X(()=>Ev)).optional()}).catchall(Hg())),Cv=X(()=>J({verb:Y(`room.read`),messages:Kg(Z(Uint8Array)),at:q().int().nonnegative()}).catchall(Hg())),wv=X(()=>J({verb:Y(`room.leave`)}).catchall(Hg())),Tv=X(()=>J({verb:Y(`room.members`)}).catchall(Hg())),Ev=X(()=>J({id:Z(Uint8Array),relation:K()})),Dv=X(()=>J({verb:Y(`room.join`)}).catchall(Hg())),Ov=X(()=>J({verb:Y(`room.invite`),invitee:X(()=>ov),token:X(()=>ey)}).catchall(Hg())),kv=X(()=>J({verb:Y(`room.rekey`),"key-epoch":q().int().nonnegative(),"wrapped-key":Xg([Z(Uint8Array),Kg(Z(Uint8Array))])}).catchall(Hg())),Av=X(()=>J({device:X(()=>ov)}).catchall(Hg())),jv=X(()=>J({result:Y(`ok`),"granted-token":X(()=>ey),members:Kg(X(()=>Av))}).catchall(Hg()));X(()=>J({result:Y(`ok`),members:Kg(X(()=>Av))}).catchall(Hg()));var Mv=X(()=>X(()=>$v)),Nv=X(()=>J({room:X(()=>yv),poster:X(()=>ov),"poster-key":X(()=>av),token:X(()=>ey),"notice-id":Z(Uint8Array),"posted-at":q().int().nonnegative(),"content-type":K(),content:Z(Uint8Array),refs:Kg(X(()=>Ev)).optional(),"valid-until":q().int().nonnegative().optional(),"key-epoch":q().int().nonnegative().optional()}).catchall(Hg())),Pv=X(()=>q().int().nonnegative()),Fv=X(()=>J({type:Y(`stream-data`),session:X(()=>Pv),seq:q().int().nonnegative(),channel:K(),bytes:Z(Uint8Array)})),Iv=X(()=>J({type:Y(`stream-ack`),session:X(()=>Pv),"ack-seq":q().int().nonnegative(),window:q().int().nonnegative()})),Lv=X(()=>J({type:Y(`stream-end`),session:X(()=>Pv),"exit-code":q().int().optional(),"exit-signal":q().int().optional()})),Rv=X(()=>q().int().nonnegative()),zv=X(()=>J({kind:Xg([Y(`capability-token`),Y(`revocation-entry`),Y(`handle-record`),Y(`room-notice`),K()]),protected:Z(Uint8Array),payload:Z(Uint8Array)})),Bv=X(()=>J({participant:X(()=>ov),hiding:Z(Uint8Array),binding:Z(Uint8Array)})),Vv=X(()=>J({verb:Y(`threshold.commit`),"session-id":X(()=>Rv),group:X(()=>ov),subject:X(()=>zv),deadline:q().int().nonnegative()})),Hv=X(()=>J({verb:Y(`threshold.sign`),"session-id":X(()=>Rv),commitments:Kg(X(()=>Bv))}));X(()=>J({"session-id":X(()=>Rv),group:X(()=>ov),share:Z(Uint8Array),issuer:X(()=>ov),"issuer-key":X(()=>av)})),X(()=>X(()=>$v));var Uv=X(()=>J({verb:Y(`threshold.abort`),"session-id":X(()=>Rv),reason:K().optional()})),Wv=X(()=>J({verb:Y(`threshold.keygen-round1`),"session-id":X(()=>Rv),threshold:q().int().nonnegative(),participants:Kg(X(()=>ov)),commitment:Kg(Z(Uint8Array)),"proof-of-knowledge":Z(Uint8Array).optional(),"existing-group-key":Z(Uint8Array).optional()})),Gv=X(()=>J({verb:Y(`threshold.keygen-round2`),"session-id":X(()=>Rv),share:Z(Uint8Array)})),Kv=X(()=>J({verb:Y(`threshold.keygen-confirm`),"session-id":X(()=>Rv),"transcript-digest":Z(Uint8Array),"group-key":Z(Uint8Array)})),qv=X(()=>Xg([X(()=>Jv),X(()=>Yv),X(()=>Xv)])),Jv=X(()=>K().regex(RegExp(`[a-z][a-z0-9-]*:[a-z][a-z0-9-]*`))),Yv=X(()=>K().regex(RegExp(`[a-z0-9.-]+/[A-Za-z0-9_.-]+:[A-Za-z0-9_.-]+`))),Xv=X(()=>K().regex(RegExp(`x-[A-Za-z0-9_.-]+:[A-Za-z0-9_.-]+`))),Zv=X(()=>J({kind:K(),path:K().optional()}));X(()=>Y(1)),X(()=>Y(4)),X(()=>Xg([q().int(),K()]));var Qv=X(()=>J({1:q().int().optional(),4:Z(Uint8Array).optional()}).catchall(Hg())),$v=X(()=>n_([Z(Uint8Array),X(()=>Qv),Xg([Z(Uint8Array),Bg()]),Z(Uint8Array)])),ey=X(()=>X(()=>$v)),ty=X(()=>J({"token-id":Z(Uint8Array),issuer:X(()=>ov),"issuer-key":X(()=>av),bearer:X(()=>ov),capability:X(()=>qv),scope:X(()=>Zv),expires:q().int().nonnegative(),"not-before":q().int().nonnegative().optional(),parent:Z(Uint8Array).optional(),"delegations-remaining":q().int().nonnegative().optional(),"valid-until":q().int().nonnegative().optional(),conditions:Z(Uint8Array).optional()}).catchall(Hg())),ny=X(()=>J({type:Y(`ping`)})),ry=X(()=>J({type:Y(`pong`)})),iy=X(()=>J({type:Y(`close`),reason:K().optional()})),ay=X(()=>J({device:X(()=>ov),addresses:Kg(K()),"snapshot-seconds":q().int(),"identity-key":X(()=>av),signature:Z(Uint8Array)}).catchall(Hg())),oy=X(()=>J({type:Y(`gossip`),peers:Kg(X(()=>ay))})),sy=X(()=>Xg([Y(`host`),Y(`server-reflexive`),Y(`relayed`)])),cy=X(()=>J({address:K(),kind:X(()=>sy),priority:q().int().nonnegative()})),ly=X(()=>J({type:Y(`candidates`),candidates:Kg(X(()=>cy))})),uy=X(()=>J({type:Y(`sync-punch`),nonce:q().int().nonnegative(),"deadline-unix-ms":q().int().nonnegative()})),dy=X(()=>J({type:Y(`observed-address`),address:K()})),fy=X(()=>J({type:Y(`relay-offer`),addresses:Kg(K())})),py=X(()=>J({type:Y(`relay-connect`),"target-device":X(()=>ov)})),my=X(()=>J({type:Y(`relay-data`),payload:Z(Uint8Array),"to-device":X(()=>ov).optional(),"from-device":X(()=>ov).optional()})),hy=X(()=>J({type:Y(`relay-inbound`),"source-device":X(()=>ov)})),gy=X(()=>J({type:Y(`coordinator`),term:q().int().nonnegative(),coordinator:X(()=>ov),"capacity-hint":q().int().nonnegative().optional()})),_y=X(()=>J({verb:Y(`version.get`)})),vy=X(()=>J({verb:Y(`webrtc.sfu-track-map`),"negotiation-id":q().int().nonnegative(),tracks:Kg(X(()=>yy))})),yy=X(()=>J({mid:K(),member:X(()=>ov),kind:Xg([Y(`audio`),Y(`video`)])})),by=X(()=>J({verb:Y(`webrtc.offer`),"negotiation-id":q().int().nonnegative(),sdp:K()})),xy=X(()=>J({verb:Y(`webrtc.answer`),"negotiation-id":q().int().nonnegative(),sdp:K()})),Sy=X(()=>J({verb:Y(`webrtc.ice-candidate`),"negotiation-id":q().int().nonnegative(),candidate:X(()=>Cy).optional()})),Cy=X(()=>J({candidate:K(),"sdp-mid":K().optional(),"sdp-m-line-index":q().int().nonnegative().optional(),"username-fragment":K().optional()})),wy=16,Ty=2;function Ey(e){let t=``;for(let n of e)t+=n.toString(wy).padStart(Ty,`0`);return t}function Dy(e){return Ey(e)}var Oy=String(2**53-1).length,ky=`message`;function Ay(e,t){return`${ky}/${e}/${String(t.sentAt).padStart(Oy,`0`)}-${Ey(t.messageId)}`}function jy(e){let t=e.slice(`${ky}/`.length);return t.slice(0,t.lastIndexOf(`/`))}function My(e){return e===`sent`||e===`received`}function Ny(e){return typeof e!=`object`||!e||!(`direction`in e)||!(`text`in e)||!(`messageId`in e)||!(`sentAt`in e)?!1:My(e.direction)&&typeof e.text==`string`&&e.messageId instanceof Uint8Array&&typeof e.sentAt==`number`}function Py(e){return{async append(t,n){await e.set(Ay(t,n),new Uint8Array(hc(n,Qs)))},async roomPaths(){let t=await e.keys(`${ky}/`);return[...new Set(t.map(jy))]},async list(t){let n=(await e.keys(`${ky}/${t}/`)).sort(),r=[];for(let t of n){let n=await e.get(t);if(n===void 0)continue;let i=rl(n,il);if(!Ny(i))throw Error(`stored message at ${t} is malformed`);r.push(i)}return r}}}var Fy=[`core/federation`];function Iy(e,t){let n=Math.min(e.version,t.version),r=e.domains.filter(e=>!Fy.includes(e)&&t.domains.includes(e));return{ok:n>=1&&r.length>0,version:n,sharedDomains:r}}function Ly(){let e=[],t=[];return{push(n){let r=e.shift();r===void 0?t.push(n):r(n)},stream:{[Symbol.asyncIterator](){return{next:async()=>new Promise(n=>{let r=t.shift();r===void 0?e.push(e=>{n({value:e,done:!1})}):n({value:r,done:!1})})}}}}}function Ry(){let e=[];function t(t){let n=e.findIndex(e=>e.sentAt===t);return n!==-1&&(e.splice(n,1),!0)}return{resolveOldest(t){let n=e.shift();n!==void 0&&n.resolve(t-n.sentAt)},rejectAll(t){for(let n of e.splice(0))n.reject(Error(t))},async sendAndAwait(n,r,i){let a=new Promise((t,r)=>{e.push({sentAt:n,resolve:t,reject:r})});return await r(),i===void 0?a:Promise.race([a,new Promise((e,r)=>{setTimeout(()=>{t(n)&&r(Error(`timed out waiting for pong`))},i)})])}}}function zy(e){return e.authenticatedPeer===void 0?e.isAccepted?e.firstAdvertisedPeer??void 0:void 0:e.authenticatedPeer}function By(e){let t=zy(e);return{direct:t===void 0?[]:[t],relayed:e.relayedDevices.map(e=>({device:e,...t===void 0?{}:{via:t}}))}}function Vy(e){let t=null;return{recordAdvert:e=>{t??=e},compute:()=>{let n=e.getAuthenticatedPeer();return By({...n===void 0?{}:{authenticatedPeer:n},firstAdvertisedPeer:t,isAccepted:e.isAccepted,relayedDevices:e.getRelayedDevices()})}}}function Hy(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1)if(e[n]!==t[n])return!1;return!0}function Uy(e){return e.split(`/`).some(e=>e===`.`||e===`..`)}function Wy(e,t){return Uy(e)||Uy(t)?!1:e===t?!0:e.startsWith(t)?t.endsWith(`/`)?!0:e.charAt(t.length)===`/`:!1}function Gy(e,t){return e.kind===t.kind?e.path===void 0||t.path!==void 0&&Wy(t.path,e.path):!1}var Ky=`signature`,qy=`identity-key`,Jy=new TextEncoder().encode(`wire-mesh/peer-advert/v1\0`);function Yy(e){let t={};for(let[n,r]of Object.entries(e))n!==`signature`&&(t[n]=r);let n=hc(t,Qs),r=new Uint8Array(Jy.length+n.length);return r.set(Jy,0),r.set(n,Jy.length),r}async function Xy(e,t){let n=await e.sign(Yy(t));return{...t,[Ky]:n}}async function Zy(e,t){let n=t[qy];try{return Hy(await e.deriveDeviceId(n[`public-key`]),t.device)?await e.verify(n,Yy(t),t[Ky]):!1}catch{return!1}}var Qy={name:`wire-mesh-core`,version:`2.0.1`,dependencies:{cbor2:`2.3.0`,"cddl.js":`1.0.1`,trilean:`1.6.2`,zod:`4.5.4`},devDependencies:{"@arethetypeswrong/cli":`0.18.5`,"@exadev/eslint-config":`2.18.0`,"@stryker-mutator/api":`10.0.0`,"@stryker-mutator/core":`10.0.0`,"@stryker-mutator/typescript-checker":`10.0.0`,"@types/node":`26.4.1`,eslint:`10.10.0`,"eslint-config-prettier":`10.1.8`,"eslint-plugin-prettier":`5.5.6`,globals:`17.12.0`,jiti:`2.7.0`,prettier:`3.9.6`,tsdown:`0.23.0`,turbo:`2.10.12`,typescript:`6.0.3`,vitest:`5.0.0`},exports:{"./adapters/frame-codec":{import:`./dist/adapters/frame-codec.mjs`,require:`./dist/adapters/frame-codec.cjs`},"./adapters/memory-storage":{import:`./dist/adapters/memory-storage.mjs`,require:`./dist/adapters/memory-storage.cjs`},"./adapters/node-fs-storage":{import:`./dist/adapters/node-fs-storage.mjs`,require:`./dist/adapters/node-fs-storage.cjs`},"./adapters/node-identity":{import:`./dist/adapters/node-identity.mjs`,require:`./dist/adapters/node-identity.cjs`},"./adapters/system-clock":{import:`./dist/adapters/system-clock.mjs`,require:`./dist/adapters/system-clock.cjs`},"./adapters/tcp-transport":{import:`./dist/adapters/tcp-transport.mjs`,require:`./dist/adapters/tcp-transport.cjs`},"./adapters/threshold-identity":{import:`./dist/adapters/threshold-identity.mjs`,require:`./dist/adapters/threshold-identity.cjs`},"./adapters/threshold-wasm":{import:`./dist/adapters/threshold-wasm.mjs`,require:`./dist/adapters/threshold-wasm.cjs`},"./adapters/tls-transport":{import:`./dist/adapters/tls-transport.mjs`,require:`./dist/adapters/tls-transport.cjs`},"./domain/async-queue":{import:`./dist/domain/async-queue.mjs`,require:`./dist/domain/async-queue.cjs`},"./domain/bulk":{import:`./dist/domain/bulk.mjs`,require:`./dist/domain/bulk.cjs`},"./domain/capability-grant":{import:`./dist/domain/capability-grant.mjs`,require:`./dist/domain/capability-grant.cjs`},"./domain/capability-request":{import:`./dist/domain/capability-request.mjs`,require:`./dist/domain/capability-request.cjs`},"./domain/data-sync":{import:`./dist/domain/data-sync.mjs`,require:`./dist/domain/data-sync.cjs`},"./domain/device-id":{import:`./dist/domain/device-id.mjs`,require:`./dist/domain/device-id.cjs`},"./domain/direct-manage-request":{import:`./dist/domain/direct-manage-request.mjs`,require:`./dist/domain/direct-manage-request.cjs`},"./domain/erasure-coding":{import:`./dist/domain/erasure-coding.mjs`,require:`./dist/domain/erasure-coding.cjs`},"./domain/gossip-expansion":{import:`./dist/domain/gossip-expansion.mjs`,require:`./dist/domain/gossip-expansion.cjs`},"./domain/gossip-extensions":{import:`./dist/domain/gossip-extensions.mjs`,require:`./dist/domain/gossip-extensions.cjs`},"./domain/grant-candidates":{import:`./dist/domain/grant-candidates.mjs`,require:`./dist/domain/grant-candidates.cjs`},"./domain/group-key":{import:`./dist/domain/group-key.mjs`,require:`./dist/domain/group-key.cjs`},"./domain/handshake":{import:`./dist/domain/handshake.mjs`,require:`./dist/domain/handshake.cjs`},"./domain/mesh-session":{import:`./dist/domain/mesh-session.mjs`,require:`./dist/domain/mesh-session.cjs`},"./domain/notice-board":{import:`./dist/domain/notice-board.mjs`,require:`./dist/domain/notice-board.cjs`},"./domain/path-trace":{import:`./dist/domain/path-trace.mjs`,require:`./dist/domain/path-trace.cjs`},"./domain/peer-advert":{import:`./dist/domain/peer-advert.mjs`,require:`./dist/domain/peer-advert.cjs`},"./domain/ping-round-trips":{import:`./dist/domain/ping-round-trips.mjs`,require:`./dist/domain/ping-round-trips.cjs`},"./domain/relay-hub":{import:`./dist/domain/relay-hub.mjs`,require:`./dist/domain/relay-hub.cjs`},"./domain/relay-use-gate":{import:`./dist/domain/relay-use-gate.mjs`,require:`./dist/domain/relay-use-gate.cjs`},"./domain/revocation-view":{import:`./dist/domain/revocation-view.mjs`,require:`./dist/domain/revocation-view.cjs`},"./domain/room":{import:`./dist/domain/room.mjs`,require:`./dist/domain/room.cjs`},"./domain/room-path":{import:`./dist/domain/room-path.mjs`,require:`./dist/domain/room-path.cjs`},"./domain/room-rekey":{import:`./dist/domain/room-rekey.mjs`,require:`./dist/domain/room-rekey.cjs`},"./domain/room-token-verification":{import:`./dist/domain/room-token-verification.mjs`,require:`./dist/domain/room-token-verification.cjs`},"./domain/shard-manifest":{import:`./dist/domain/shard-manifest.mjs`,require:`./dist/domain/shard-manifest.cjs`},"./domain/threshold-subject":{import:`./dist/domain/threshold-subject.mjs`,require:`./dist/domain/threshold-subject.cjs`},"./domain/tokens":{import:`./dist/domain/tokens.mjs`,require:`./dist/domain/tokens.cjs`},"./domain/topology":{import:`./dist/domain/topology.mjs`,require:`./dist/domain/topology.cjs`},"./domain/topology-snapshot":{import:`./dist/domain/topology-snapshot.mjs`,require:`./dist/domain/topology-snapshot.cjs`},"./domain/webrtc-signaling":{import:`./dist/domain/webrtc-signaling.mjs`,require:`./dist/domain/webrtc-signaling.cjs`},"./generated/protocol":{import:`./dist/generated/protocol.mjs`,require:`./dist/generated/protocol.cjs`},"./generated/runtime":{import:`./dist/generated/runtime.mjs`,require:`./dist/generated/runtime.cjs`},"./ports/clock":{import:`./dist/ports/clock.mjs`,require:`./dist/ports/clock.cjs`},"./ports/identity":{import:`./dist/ports/identity.mjs`,require:`./dist/ports/identity.cjs`},"./ports/storage":{import:`./dist/ports/storage.mjs`,require:`./dist/ports/storage.cjs`},"./ports/transport":{import:`./dist/ports/transport.mjs`,require:`./dist/ports/transport.cjs`},"./package.json":`./package.json`},files:[`dist`,`wasm-dist`],packageManager:`pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c`,publishConfig:{provenance:!0,access:`public`},repository:{type:`git`,url:`https://github.com/ExaDev/wire-mesh.git`,directory:`ts/packages/core`},scripts:{_build:`tsdown`,"_build-wasm":`./scripts/build-threshold-wasm.sh`,"_conformance-check":`vitest run test/conformance.unit.test.ts`,_generate:`node generate.ts`,_lint:`eslint . --fix --cache --max-warnings 0`,_mutation:`stryker run stryker.config.ts`,_test:`vitest run`,_typecheck:`tsc -p tsconfig.json --noEmit && tsc -p tsconfig.node.json --noEmit`,build:`turbo run _build`,"build-wasm":`turbo run _build-wasm`,"conformance-check":`turbo run _conformance-check`,generate:`turbo run _generate`,lint:`turbo run _lint`,mutation:`turbo run _mutation`,prepack:`node scripts/assert-wasm-dist.ts`,test:`turbo run _test`,typecheck:`turbo run _typecheck`},type:`module`}.version,$y=`wire-mesh/version`,eb=`version.get`;function tb(e){return`verb`in e&&e.verb===eb}function nb(){return{result:`ok`,version:Qy}}var rb=new Set([`device`,`addresses`,`snapshot-seconds`,qy,Ky]),ib=`topology/peers`,ab=/^[a-z][a-z0-9-]*\/[a-z][a-z0-9-]*$/;function ob(e){for(let t of Object.keys(e)){if(rb.has(t))throw Error(`sendGossipUpdate extension key "${t}" collides with a mandatory peer-advert field`);if(t===`topology/peers`)throw Error(`sendGossipUpdate extension key "${t}" collides with a session-managed gossip field`);if(t===`wire-mesh/version`)throw Error(`sendGossipUpdate extension key "${t}" is reserved for wire-mesh-core's own self-reported version`);if(!ab.test(t))throw Error(`sendGossipUpdate extension key "${t}" must be domain-qualified as "<domain>/<field>" (e.g. "presence/status")`)}}function sb(e){return new Uint8Array(hc(e,Qs))}function cb(e,t){return{type:`relay-data`,payload:sb(e),...t===void 0?{}:{"to-device":t}}}var lb=class extends Error{constructor(e){super(e),this.name=`SchemaInvalidFrameError`}};function ub(e){let t=rl(new Uint8Array(e),il),n=Q_.safeParse(t);if(!n.success)throw new lb(n.error.message);return n.data}function db(e){let t;try{t=rl(e,il)}catch{return null}let n=Q_.safeParse(t);return n.success?n.data:null}function fb(){let e=new Map;return{has:t=>e.has(Dy(t)),add:t=>{e.set(Dy(t),t)},remove:t=>{e.delete(Dy(t))},list:()=>[...e.values()]}}var pb=1e3,mb=3e3;function hb(e){return{type:`handshake`,version:1,domains:[...e]}}function gb(e,t,n,r,i,a=[],o,s){let c=null,l={status:`idle`},u={status:`pending`},d=new Map,f=[],p=!1,m=Ly(),h=null,g=null,_=0,v=null,y=0,b=fb(),x=Vy({getAuthenticatedPeer:()=>c?.peerDeviceId,isAccepted:r===null,getRelayedDevices:()=>b.list()}),S=new Map,C=Ly(),w=Ly(),T=Ry();function ee(){return{state:l,directory:[...d.values()],frameLog:[...f]}}function E(){m.push(ee())}function D(e){for(let t of S.values())t.reject(Error(e));S.clear()}function O(e,t,n){let r=y;y+=1;let i=n??v;return{type:`manage-request`,"request-id":r,command:e,scope:t,...i===null?{}:{token:i}}}function te(){if(c===null||l.status!==`connected`)throw Error(`not connected`);return c}async function k(e,t,n){if(c===null)throw Error(`not connected`);if(t){await c.send(cb(e,n));return}await c.send(e)}function ne(e){let t=e[`request-id`],n=S.get(t);n!==void 0&&(S.delete(t),n.resolve(e.outcome))}function re(e,t){let n=e[`request-id`],r=t?.[`from-device`],i=t?.[`to-device`],a={requestId:n,command:e.command,scope:e.scope,...e.token===void 0?{}:{token:e.token},...r===void 0?{}:{fromDevice:r},...i===void 0?{}:{toDevice:i},respond:async e=>{let i={type:`manage-response`,"request-id":n,outcome:e};f.push({direction:`sent`,frame:i}),await k(i,t!==void 0,r),E()}};if(tb(e.command.params)){a.respond(nb());return}C.push(a)}async function ie(n){if(n.type===`relay-data`){let e=db(n.payload);if(e!==null&&(e.type===`manage-request`||e.type===`manage-response`)){f.push({direction:`received`,frame:e}),e.type===`manage-response`?ne(e):re(e,n);return}f.push({direction:`received`,frame:n});return}if(f.push({direction:`received`,frame:n}),n.type===`handshake`)j(n);else if(n.type===`gossip`)for(let t of n.peers)await Zy(e,t)&&(d.set(Dy(t.device),{device:t.device,advert:t}),x.recordAdvert(t.device),i?.(t));else if(n.type===`relay-inbound`)b.add(n[`source-device`]);else if(n.type===`manage-response`)ne(n);else if(n.type===`manage-request`)re(n);else if(n.type===`pong`)T.resolveOldest(t.now());else if(n.type===`revocation-announce`)for(let e of n.entries)w.push(e)}async function ae(e){if(c===null)throw Error(`not connected`);if(b.has(e))return;let t={type:`relay-connect`,"target-device":e};f.push({direction:`sent`,frame:t}),await c.send(t),b.add(e),E()}let A=hb([]);function j(e){if(u.status!==`pending`)return;h!==null&&(clearTimeout(h),h=null);let t=Iy(A,e);u=t.ok?{status:`negotiated`,version:t.version,sharedDomains:t.sharedDomains}:{status:`rejected`,reason:`no shared domains or version`},l.status===`connected`&&(l={...l,handshake:u})}function oe(e,t,r){if(!p){if(D(`disconnected before a response arrived`),T.rejectAll(`disconnected before a pong arrived`),n!==null&&_<n.maxAttempts){_+=1;let i=_;l={status:`reconnecting`,address:t,attempt:i,reason:e},E(),g=setTimeout(()=>{g=null,ue(t,r).catch(e=>{oe(e instanceof Error?e.message:String(e),t,r)})},n.delayMs(i));return}l={status:`closed`,address:t,reason:e},E()}}async function se(e,t,n){for await(let t of e.receive()){if(p)return;await ie(t),await o?.(e,t),E()}s?.(e),l.status===`connected`&&oe(`node closed the connection`,t,n)}async function ce(n){return n!==void 0&&ob(n),{type:`gossip`,peers:[await Xy(e,{...n,[$y]:Qy,[ib]:x.compute(),device:e.deviceId,addresses:[...a],"snapshot-seconds":Math.floor(t.now()/pb),"identity-key":e.identityKey})]}}async function le(e,t,n){c=e,A=hb(n),u={status:`pending`},l={status:`connected`,address:t,handshake:u},f.push({direction:`sent`,frame:A}),await c.send(A),E();let r=await ce();f.push({direction:`sent`,frame:r}),await c.send(r),E(),h=setTimeout(()=>{h=null,u.status===`pending`&&(u={status:`unanswered`},l.status===`connected`&&(l={...l,handshake:u}),E())},mb),se(c,t,n).catch(e=>{l.status===`connected`&&oe(e instanceof Error?e.message:String(e),t,n)})}async function ue(e,t){if(r===null)throw Error(`this session is already connected; there is nothing to dial`);h!==null&&(clearTimeout(h),h=null),l={status:`connecting`,address:e},E();let n=await r(e);if(p){await n.close();return}await le(n,e,t)}return{wireUpConnection:le,session:{events:m.stream,incomingManageRequests:C.stream,revocationAnnouncements:w.stream,async connect(e,t){if(c!==null)throw Error(`a session connects once; create a new one to reconnect`);_=0,await ue(e,t)},async sendPing(){let e=te(),t={type:`ping`};f.push({direction:`sent`,frame:t}),await e.send(t),E()},async sendPingMeasureRtt(e){let n=te();return T.sendAndAwait(t.now(),async()=>{let e={type:`ping`};f.push({direction:`sent`,frame:e}),await n.send(e),E()},e)},setToken(e){v=e},async sendManageRequest(e,t,n,r,i){te(),n!==void 0&&await ae(n);let a=O(e,t,r),o=a[`request-id`],s=new Promise((e,t)=>{S.set(o,{resolve:e,reject:t})});return f.push({direction:`sent`,frame:a}),await k(a,n!==void 0,n),E(),i===void 0?s:Promise.race([s,new Promise(e=>{setTimeout(()=>{S.delete(o)&&(n!==void 0&&b.remove(n),e({result:`error`,code:`timeout`}))},i)})])},async sendRevocationAnnounce(e){te();let t={type:`revocation-announce`,entries:[...e]};f.push({direction:`sent`,frame:t}),await k(t,!1),E()},async sendGossipUpdate(e){te();let t=await ce(e);f.push({direction:`sent`,frame:t}),await k(t,!1),E()},getTopologyPeers(){return x.compute()},async sendDataFrame(e){te(),f.push({direction:`sent`,frame:e}),await k(e,!1),E()},async close(){p=!0,h!==null&&(clearTimeout(h),h=null),g!==null&&(clearTimeout(g),g=null),D(`connection closed before a response arrived`),T.rejectAll(`connection closed before a pong arrived`),c!==null&&await c.close(),(l.status===`connected`||l.status===`connecting`||l.status===`reconnecting`)&&(l={status:`closed`,address:l.address,reason:`closed by you`}),E()}}}}function _b(e,t,n={now:()=>Date.now()},r=null,i=[],a){let{session:o}=gb(t,n,r,async t=>e.connect(t),a,i);return o}async function vb(e,t,n,r={}){let i=r.clock??{now:()=>Date.now()},a=null,o=new Promise(e=>{a=e}),s=!1,{session:c,wireUpConnection:l}=gb(t,i,null,null,e=>{s||(s=!0,a?.(e.device)),r.onPeerAdvert?.(e)},r.addresses,r.onFrame,r.onSessionEnd);return await l(e,r.label??`accepted`,n),{...c,peerDeviceId:o}}function yb(e){return e instanceof Error?e:Error(String(e))}function bb(e){let t=Dy(e.selfDeviceId),n=new Set;async function r(t){let n;try{n=await e.shouldExpand(t)}catch(n){e.onExpansionFailed?.(t,[yb(n)]);return}if(!n){e.onExpansionDeclined?.(t);return}let r=[];for(let n of t.addresses)try{let r=await e.dial(n);e.onExpanded(t,n,r);return}catch(e){r.push(yb(e))}e.onExpansionFailed?.(t,r)}return{considerAdvert(e){let i=Dy(e.device);i===t||n.has(i)||e.addresses.length===0||(n.add(i),r({device:e.device,addresses:e.addresses}))}}}var xb=/^[0-9a-f]{64}$/,Sb=/^[A-Za-z0-9_-]+$/;function Cb(e,t){if(!xb.test(e))throw Error(`expected ${t} to be a 64-character lowercase hex device-id, got ${JSON.stringify(e)}`)}function wb(e,t){if(Cb(e,`a`),Cb(t,`b`),e===t)throw Error(`a DM room path cannot name the same device twice (${e})`);return e<t?`${e}+${t}`:`${t}+${e}`}function Tb(e){let t=e.indexOf(`/`);if(t!==-1){let n=e.slice(0,t),r=e.slice(t+1);if(xb.test(n)&&Sb.test(r))return{kind:`owner-named`,owner:n,localName:r}}let n=e.indexOf(`+`);if(n!==-1){let t=e.slice(0,n),r=e.slice(n+1);if(xb.test(t)&&xb.test(r)&&t!==r)return{kind:`dm`,participants:[t,r]}}throw Error(`${JSON.stringify(e)} is not a valid room-path`)}var Eb=1e3,Db=1002,Ob=`the web console is a client only: it cannot listen`;function kb(e){let t=[],n=[],r=!1,i=null;function a(){r=!0;for(let e of n.splice(0))e.resolve({value:void 0,done:!0})}function o(e){i=e,r=!0;for(let t of n.splice(0))t.reject(e)}e.addEventListener(`message`,r=>{if(!(r.data instanceof ArrayBuffer)){o(Error(`expected a binary WebSocket message`)),e.close(Db,`protocol error`);return}let i;try{i=ub(r.data)}catch(t){if(t instanceof lb)return;o(t instanceof Error?t:Error(`frame body failed to decode: ${String(t)}`)),e.close(Db,`protocol error`);return}let a=n.shift();a?a.resolve({value:i,done:!1}):t.push(i)}),e.addEventListener(`close`,a),e.addEventListener(`error`,a);let s={[Symbol.asyncIterator](){return{next:async()=>c()}}};async function c(){let e=t.shift();return e===void 0?i===null?r?Promise.resolve({value:void 0,done:!0}):new Promise((e,t)=>{n.push({resolve:e,reject:t})}):Promise.reject(i):Promise.resolve({value:e,done:!1})}return{async send(t){return r?Promise.reject(Error(`connection is closed`)):(e.send(sb(t)),Promise.resolve())},receive:()=>s,async close(){return e.close(Eb),Promise.resolve()}}}function Ab(){return{async connect(e){let t=new URL(e);if(t.protocol!==`ws:`&&t.protocol!==`wss:`)return Promise.reject(Error(`not a WebSocket address: ${e}`));let n=new WebSocket(t);return n.binaryType=`arraybuffer`,new Promise((e,r)=>{n.addEventListener(`open`,()=>{e()}),n.addEventListener(`error`,()=>{r(Error(`connect to ${t.toString()} failed`))})}).then(()=>kb(n))},async listen(){return Promise.reject(Error(Ob))}}}var jb=(e,t,n)=>({kind:`complex`,re:e*Math.cos(t),im:e*Math.sin(t),unit:n}),Mb=i_(K(),q()),Nb=o_([`ms`,`s`,`min`,`h`,`d`]);Qg(`kind`,[J({kind:Y(`number`),value:q(),unit:Mb.optional()}),J({kind:Y(`text`),value:K()}),J({kind:Y(`boolean`),value:Rg()}),J({kind:Y(`instant`),value:K()}),J({kind:Y(`duration`),value:q(),unit:Nb}),J({kind:Y(`complex`),re:q(),im:q(),unit:Mb.optional()})]);function Pb(e){if(e===void 0)return{};let t={};for(let[n,r]of Object.entries(e))r!==0&&(t[n]=r);return t}function Fb(e,t){let n=Pb(e),r=Pb(t),i=Object.keys(n),a=Object.keys(r);return i.length===a.length&&i.every(e=>n[e]===r[e])}function Ib(e,t){let n=Pb(e),r=Pb(t),i={...n};for(let[e,t]of Object.entries(r))i[e]=(i[e]??0)+t;return Pb(i)}function Lb(e,t){let n=Pb(e),r=Pb(t),i={...n};for(let[e,t]of Object.entries(r))i[e]=(i[e]??0)-t;return Pb(i)}J({code:o_([`not-found`,`wrong-type`,`domain-error`]),message:K()});function Q(e){return{status:`definite`,value:e}}function $(e,t){return{status:`indeterminate`,reason:{code:e,message:t}}}function Rb(...e){for(let t of e)if(t?.status===`indeterminate`)return t.reason}var zb=X(()=>Xg([K(),q(),Rg(),Bg(),Kg(zb),i_(K(),zb)])),Bb=o_([`gt`,`gte`,`lt`,`lte`,`eq`,`neq`]),Vb=o_([`equals`,`notEquals`,`matches`,`notMatches`,`portableMatches`,`portableNotMatches`]),Hb=o_([`in`,`notIn`]),Ub=o_([`add`,`subtract`,`multiply`,`divide`,`power`,`modulo`]),Wb=o_([`first`,`unique`]),Gb=J({kind:Y(`not`),get operand(){return rx}}),Kb=J({kind:Y(`and`),get left(){return rx},get right(){return rx}}),qb=J({kind:Y(`or`),get left(){return rx},get right(){return rx}}),Jb=J({kind:Y(`allOf`),get operands(){return Kg(rx)}}),Yb=J({kind:Y(`anyOf`),get operands(){return Kg(rx)}}),Xb=J({kind:Y(`compare`),op:Bb,get left(){return vx},get right(){return vx}}),Zb=J({kind:Y(`textCompare`),op:Vb,get left(){return vx},get right(){return vx}}),Qb=J({kind:Y(`memberOf`),op:Hb,get operand(){return vx},get candidates(){return Kg(vx)}}),$b=J({kind:Y(`exists`),get operand(){return vx}}),ex=J({kind:Y(`some`),collection:zb,get item(){return rx},get filter(){return rx.optional()}}),tx=J({kind:Y(`every`),collection:zb,get item(){return rx},get filter(){return rx.optional()}}),nx=J({kind:Y(`treeReference`),key:zb}),rx=Qg(`kind`,[Gb,Kb,qb,Jb,Yb,Xb,Zb,Qb,$b,ex,tx,nx]),ix=J({kind:Y(`numberLiteral`),value:q(),unit:Mb.optional()}),ax=J({kind:Y(`textLiteral`),value:K()}),ox=J({kind:Y(`booleanLiteral`),value:Rg()}),sx=J({kind:Y(`instantLiteral`),value:K()}),cx=J({kind:Y(`durationLiteral`),value:q(),unit:Nb}),lx=Xg([Jg({kind:Y(`complexLiteral`),re:q(),im:q(),unit:Mb.optional()}),Jg({kind:Y(`complexLiteral`),magnitude:q(),phase:q(),unit:Mb.optional()})]),ux=J({kind:Y(`reference`),key:zb,unit:Mb.optional()}),dx=J({kind:Y(`arithmetic`),op:Ub,get left(){return vx},get right(){return vx}}),fx=J({kind:Y(`negate`),get operand(){return vx}}),px=J({kind:Y(`call`),fn:K(),get args(){return Kg(vx)}}),mx=J({kind:Y(`lookup`),table:zb,get keys(){return Kg(vx)}}),hx=J({get when(){return rx},get then(){return vx}}),gx=J({kind:Y(`conditional`),hitPolicy:Wb.optional(),get cases(){return Kg(hx)},get fallback(){return vx}}),_x=Qg(`mode`,[J({mode:Y(`max`),get item(){return vx}}),J({mode:Y(`min`),get item(){return vx}}),J({mode:Y(`reduce`),get initial(){return vx},get combine(){return vx}})]),vx=Xg([Qg(`kind`,[ix,ax,ox,sx,cx,ux,dx,fx,px,mx,gx,J({kind:Y(`fold`),collection:zb,get filter(){return rx.optional()},combiner:_x}),J({kind:Y(`accumulator`)}),J({kind:Y(`delegate`),system:K(),payload:zb}),nx]),lx]),yx={},bx=1e4;function xx(e,t){let n=0;return{checkNode(r){if(n+=1,n>e)return $(`domain-error`,`evaluation exceeded the maximum of ${e.toString()} nodes visited in a single call (resource exhausted)`);if(r>=t)return $(`domain-error`,`evaluation nesting depth exceeds the maximum of ${t.toString()} (resource exhausted)`)}}}async function Sx(e,t,n,r,i,a,o,s,c,l){let u=await i.resolveCollection(t,r);return Promise.all(u.map(async t=>{if(n===void 0)return{item:t,filterOutcome:`include`};let r=await e(n,t,i,void 0,a,o,s,c,l+1);return r.status===`indeterminate`?{item:t,filterOutcome:r}:{item:t,filterOutcome:r.value?`include`:`exclude`}}))}function Cx(e){for(let{filterOutcome:t}of e)if(t!==`include`&&t!==`exclude`&&t.status===`indeterminate`)return t.reason}function wx(e,t){return t>=e.from&&t<=e.to}function Tx(e,t){let n=e.ranges.some(e=>wx(e,t));return e.negated?!n:n}var Ex=class extends Error{pattern;index;constructor(e,t,n){super(`invalid pattern at index ${String(t)}: ${n}\n ${e}\n ${` `.repeat(t)}^`),this.name=`RegexParseError`,this.pattern=e,this.index=t}};function Dx(e){return e.charCodeAt(0)}function Ox(e,t){return{from:Dx(e),to:Dx(t)}}function kx(e){let t=Dx(e);return{from:t,to:t}}var Ax=[Ox(`0`,`9`)],jx=[Ox(`A`,`Z`),Ox(`a`,`z`),Ox(`0`,`9`),kx(`_`)],Mx=[kx(` `),kx(` `),kx(`
|
|
71
71
|
`),kx(`\r`),kx(`\f`),kx(`\v`)];function Nx(e){switch(e){case`d`:return{kind:`charClass`,negated:!1,ranges:Ax};case`D`:return{kind:`charClass`,negated:!0,ranges:Ax};case`w`:return{kind:`charClass`,negated:!1,ranges:jx};case`W`:return{kind:`charClass`,negated:!0,ranges:jx};case`s`:return{kind:`charClass`,negated:!1,ranges:Mx};case`S`:return{kind:`charClass`,negated:!0,ranges:Mx};default:throw Error(`unreachable shorthand class letter`)}}var Px=new Set([`|`,`)`]),Fx={".":`.`,"*":`*`,"+":`+`,"?":`?`,"(":`(`,")":`)`,"[":`[`,"]":`]`,"{":`{`,"}":`}`,"|":`|`,"^":`^`,$:`$`,"\\":`\\`,"/":`/`,n:`
|
|
72
|
-
`,t:` `,r:`\r`,f:`\f`,v:`\v`},Ix=class{pattern;pos=0;constructor(e){this.pattern=e}get position(){return this.pos}atEnd(){return this.pos>=this.pattern.length}peek(e=0){return this.pattern[this.pos+e]}advance(){let e=this.pattern[this.pos];if(e===void 0)throw new Ex(this.pattern,this.pos,`unexpected end of pattern`);return this.pos+=1,e}parseAlternation(){let e=this.parseSequence(),t=[];for(;this.peek()===`|`;)this.advance(),t.push(this.parseSequence());return t.length===0?e:{kind:`alternation`,branches:[e,...t]}}parseSequence(){if(this.atEnd()||Px.has(this.peek()??``))return{kind:`concat`,operands:[]};let e=this.parseQuantified(),t=[];for(;!this.atEnd()&&!Px.has(this.peek()??``);)t.push(this.parseQuantified());return t.length===0?e:{kind:`concat`,operands:[e,...t]}}parseQuantified(){let e=this.pos,t=this.parseAtom();if(t.kind===`anchorStart`||t.kind===`anchorEnd`){if(this.peekIsQuantifierStart())throw new Ex(this.pattern,e,`an anchor ('${t.kind===`anchorStart`?`^`:`$`}') cannot be quantified`);return t}let n=this.tryParseQuantifier();if(n===void 0)return t;if(this.peekIsQuantifierStart())throw new Ex(this.pattern,this.pos,`a quantifier cannot itself be quantified -- this grammar has no lazy or possessive modifiers, since a pattern that only ever answers a yes/no match question has no notion for either to change`);switch(n.kind){case`star`:return{kind:`star`,operand:t};case`plus`:return{kind:`plus`,operand:t};case`optional`:return{kind:`optional`,operand:t};case`repeat`:return{kind:`repeat`,operand:t,min:n.min,max:n.max};default:throw Error(`unreachable quantifier kind`)}}peekIsQuantifierStart(){let e=this.peek();if(e===`*`||e===`+`||e===`?`)return!0;if(e===`{`){let e=this.pos,t=this.tryParseBound();return this.pos=e,t!==void 0}return!1}tryParseQuantifier(){let e=this.peek();if(e===`*`)return this.advance(),{kind:`star`};if(e===`+`)return this.advance(),{kind:`plus`};if(e===`?`)return this.advance(),{kind:`optional`};if(e===`{`){let e=this.tryParseBound();return e===void 0?void 0:{kind:`repeat`,min:e.min,max:e.max}}}tryParseBound(){let e=this.pos;this.pos+=1;let t=this.readDigits();if(t===``){this.pos=e;return}let n,r=!1;if(this.peek()===`,`&&(r=!0,this.pos+=1,n=this.readDigits()),this.peek()!==`}`){this.pos=e;return}this.pos+=1;let i=Number.parseInt(t,10),a=r?n===``?void 0:Number.parseInt(n??``,10):i;if(a!==void 0&&a<i)throw new Ex(this.pattern,e,`quantifier range is backwards: {${t}${r?`,`+(n??``):``}} would require between ${String(i)} and ${String(a)} repetitions`);return{min:i,max:a}}readDigits(){let e=``;for(;;){let t=this.peek();if(t===void 0||t<`0`||t>`9`)break;e+=t,this.pos+=1}return e}parseAtom(){let e=this.peek();if(e===void 0)throw new Ex(this.pattern,this.pos,`unexpected end of pattern`);if(e===`^`)return this.advance(),{kind:`anchorStart`};if(e===`$`)return this.advance(),{kind:`anchorEnd`};if(e===`.`)return this.advance(),{kind:`anyChar`};if(e===`(`)return this.parseGroup();if(e===`[`)return this.parseCharClass();if(e===`\\`)return this.parseEscapedAtom();if(e===`*`||e===`+`||e===`?`)throw new Ex(this.pattern,this.pos,`quantifier '${e}' with nothing to repeat`);return this.advance(),{kind:`literal`,codeUnit:e.charCodeAt(0)}}parseGroup(){let e=this.pos;if(this.advance(),this.peek()===`?`&&this.peek(1)===`:`)this.advance(),this.advance();else throw new Ex(this.pattern,e,`capturing groups are not supported in this grammar -- there is nothing to capture, since a pattern only ever answers whether it matches. Use '(?:...)' for grouping.`);let t=this.parseAlternation();if(this.peek()!==`)`)throw new Ex(this.pattern,this.pos,`expected ')' to close '(?:'`);return this.advance(),t}parseEscapedAtom(){let e=this.pos;if(this.advance(),this.atEnd())throw new Ex(this.pattern,e,`trailing backslash with nothing to escape`);let t=this.advance();if(t===`d`||t===`D`||t===`w`||t===`W`||t===`s`||t===`S`)return Nx(t);let n=Fx[t];if(n!==void 0)return{kind:`literal`,codeUnit:n.charCodeAt(0)};throw new Ex(this.pattern,e,`unknown escape sequence '\\${t}'`)}parseCharClass(){let e=this.pos;this.advance();let t=!1;this.peek()===`^`&&(this.advance(),t=!0);let n=[];for(;;){if(this.atEnd())throw new Ex(this.pattern,e,`unterminated character class -- missing closing ']'`);if(this.peek()===`]`){if(n.length===0)throw new Ex(this.pattern,this.pos,`a character class must contain at least one item -- ']' immediately, or immediately after '[^', is not the empty class here (escape it as '\\]' to match a literal ']')`);this.advance();break}n.push(...this.parseClassItem())}return{kind:`charClass`,negated:t,ranges:n}}parseClassItem(){let e=this.peek();if(e===`\\`){let e=this.pos;if(this.advance(),this.atEnd())throw new Ex(this.pattern,e,`trailing backslash with nothing to escape`);let t=this.advance();if(t===`d`||t===`w`||t===`s`)return Nx(t).ranges;if(t===`D`||t===`W`||t===`S`)throw new Ex(this.pattern,e,`the negated shorthand class '\\${t}' cannot be embedded inside a character class, because its complement cannot be represented as a set of ranges to union with the class's other members -- use it as its own atom instead of embedding it here`);let n=Fx[t];if(n===void 0)throw new Ex(this.pattern,e,`unknown escape sequence '\\${t}'`);return this.parseOptionalRangeFrom(n.charCodeAt(0))}if(e===void 0)throw new Ex(this.pattern,this.pos,`unterminated character class -- missing closing ']'`);return this.advance(),this.parseOptionalRangeFrom(e.charCodeAt(0))}parseOptionalRangeFrom(e){if(this.peek()===`-`&&this.peek(1)!==void 0&&this.peek(1)!==`]`){let t=this.pos;this.advance();let n=this.parseClassRangeEndpoint();if(n<e)throw new Ex(this.pattern,t,`invalid range in character class: '${String.fromCharCode(e)}-${String.fromCharCode(n)}' is reversed`);return[{from:e,to:n}]}return[{from:e,to:e}]}parseClassRangeEndpoint(){let e=this.peek();if(e===`\\`){let e=this.pos;if(this.advance(),this.atEnd())throw new Ex(this.pattern,e,`trailing backslash with nothing to escape`);let t=this.advance();if(t===`d`||t===`D`||t===`w`||t===`W`||t===`s`||t===`S`)throw new Ex(this.pattern,e,`a shorthand class ('\\${t}') cannot be a range endpoint`);let n=Fx[t];if(n===void 0)throw new Ex(this.pattern,e,`unknown escape sequence '\\${t}'`);return n.charCodeAt(0)}if(e===void 0)throw new Ex(this.pattern,this.pos,`unterminated character class -- missing closing ']'`);return this.advance(),e.charCodeAt(0)}};function Lx(e){let t=new Ix(e),n=t.parseAlternation();if(!t.atEnd())throw new Ex(e,t.position,`unexpected character -- if this was meant literally, escape it with a backslash`);return n}var Rx=class{states=[];add(e){return this.states.push(e),this.states.length-1}patch(e,t){for(let n of e){let e=this.states[n.state];if(e!==void 0)switch(n.field){case`to`:(e.kind===`char`||e.kind===`anchorStart`||e.kind===`anchorEnd`)&&(e.to=t);break;case`to1`:e.kind===`split`&&(e.to1=t);break;case`to2`:e.kind===`split`&&(e.to2=t)}}}emptyFrag(){let e=this.add({kind:`split`,to1:-1,to2:-1});return{start:e,out:[{state:e,field:`to1`},{state:e,field:`to2`}]}}compileRepeat(e){let{operand:t,min:n,max:r}=e;if(r===void 0){if(n===0)return this.compileNode({kind:`star`,operand:t});let e=[];for(let r=0;r<n-1;r+=1)e.push(t);return e.push({kind:`plus`,operand:t}),this.compileNode({kind:`concat`,operands:e})}let i=[];for(let e=0;e<n;e+=1)i.push(t);for(let e=0;e<r-n;e+=1)i.push({kind:`optional`,operand:t});return i.length===0?this.emptyFrag():this.compileNode({kind:`concat`,operands:i})}compileNode(e){switch(e.kind){case`literal`:{let t=e.codeUnit,n=this.add({kind:`char`,test:e=>e===t,to:-1});return{start:n,out:[{state:n,field:`to`}]}}case`anyChar`:{let e=this.add({kind:`char`,test:()=>!0,to:-1});return{start:e,out:[{state:e,field:`to`}]}}case`charClass`:{let t=this.add({kind:`char`,test:t=>Tx(e,t),to:-1});return{start:t,out:[{state:t,field:`to`}]}}case`anchorStart`:{let e=this.add({kind:`anchorStart`,to:-1});return{start:e,out:[{state:e,field:`to`}]}}case`anchorEnd`:{let e=this.add({kind:`anchorEnd`,to:-1});return{start:e,out:[{state:e,field:`to`}]}}case`concat`:{if(e.operands.length===0)return this.emptyFrag();let[t,...n]=e.operands;if(t===void 0)throw Error(`unreachable: a non-empty operands array always has a first element`);let r=this.compileNode(t);for(let e of n){let t=this.compileNode(e);this.patch(r.out,t.start),r={start:r.start,out:t.out}}return r}case`alternation`:{let[t,...n]=e.branches;if(t===void 0)throw Error(`unreachable: AlternationNode always has at least two branches`);let r=this.compileNode(t);for(let e of n){let t=this.compileNode(e);r={start:this.add({kind:`split`,to1:r.start,to2:t.start}),out:[...r.out,...t.out]}}return r}case`star`:{let t=this.compileNode(e.operand),n=this.add({kind:`split`,to1:t.start,to2:-1});return this.patch(t.out,n),{start:n,out:[{state:n,field:`to2`}]}}case`plus`:{let t=this.compileNode(e.operand),n=this.add({kind:`split`,to1:t.start,to2:-1});return this.patch(t.out,n),{start:t.start,out:[{state:n,field:`to2`}]}}case`optional`:{let t=this.compileNode(e.operand),n=this.add({kind:`split`,to1:t.start,to2:-1});return{start:n,out:[...t.out,{state:n,field:`to2`}]}}case`repeat`:return this.compileRepeat(e);default:throw Error(`unreachable regex node kind`)}}build(e){let t=this.compileNode(e),n=this.add({kind:`match`});return this.patch(t.out,n),{states:this.states,start:t.start,matchState:n}}};function zx(e){return new Rx().build(e)}function Bx(e,t,n,r){let i=new Set,a=new Set,o=[...t];for(;o.length>0;){let t=o.pop();if(t===void 0||a.has(t))continue;a.add(t);let s=e.states[t];if(s!==void 0)switch(s.kind){case`char`:case`match`:i.add(t);break;case`split`:o.push(s.to1,s.to2);break;case`anchorStart`:n===0&&o.push(s.to);break;case`anchorEnd`:n===r&&o.push(s.to)}}return i}function Vx(e,t,n){let r=new Set;for(let i of t){let t=e.states[i];t?.kind===`char`&&t.test(n)&&r.add(t.to)}return r}function Hx(e,t){let n=t.length,r=Bx(e,[e.start],0,n);if(r.has(e.matchState))return!0;for(let i=0;i<n;i+=1){let a=t.charCodeAt(i),o=Vx(e,r,a);if(o.add(e.start),r=Bx(e,[...o],i+1,n),r.has(e.matchState))return!0}return!1}function Ux(e){let t=zx(Lx(e));return{test:e=>Hx(t,e)}}function Wx(e,t){if(e.status===`definite`&&!e.value||t.status===`definite`&&!t.value)return Q(!1);let n=Rb(e,t);return n===void 0?Q(!0):{status:`indeterminate`,reason:n}}function Gx(e,t){if(e.status===`definite`&&e.value||t.status===`definite`&&t.value)return Q(!0);let n=Rb(e,t);return n===void 0?Q(!1):{status:`indeterminate`,reason:n}}function Kx(e,t,n){switch(e){case`gt`:return t>n;case`gte`:return t>=n;case`lt`:return t<n;case`lte`:return t<=n;case`eq`:return t===n;case`neq`:return t!==n;default:throw Error(`unreachable comparison operator`)}}var qx={ms:1,s:1e3,min:6e4,h:36e5,d:864e5};function Jx(e,t){return e*qx[t]}function Yx(e){let t=Date.parse(e);return Number.isNaN(t)?void 0:t}function Xx(e){return $(`wrong-type`,`'${e}' is not a parseable ISO-8601 timestamp`)}function Zx(e){let t=new Date(e);return Number.isNaN(t.getTime())?$(`domain-error`,`the resulting instant falls outside the representable timestamp range`):Q({kind:`instant`,value:t.toISOString()})}function Qx(e,t,n){switch(t.kind){case`number`:return n.kind===`number`?Fb(t.unit,n.unit)?Q(Kx(e,t.value,n.value)):$(`wrong-type`,`cannot compare numbers with incompatible units`):$(`wrong-type`,`cannot compare a 'number' value with a '${n.kind}' value`);case`text`:return $(`wrong-type`,`text values are not comparable via 'compare'; use 'textCompare'`);case`boolean`:return n.kind===`boolean`?e!==`eq`&&e!==`neq`?$(`wrong-type`,`booleans have no natural ordering; '${e}' is only defined for 'eq'/'neq'`):Q(e===`eq`?t.value===n.value:t.value!==n.value):$(`wrong-type`,`cannot compare a 'boolean' value with a '${n.kind}' value`);case`instant`:{if(n.kind!==`instant`)return $(`wrong-type`,`cannot compare an 'instant' value with a '${n.kind}' value`);let r=Yx(t.value);if(r===void 0)return Xx(t.value);let i=Yx(n.value);return i===void 0?Xx(n.value):Q(Kx(e,r,i))}case`duration`:return n.kind===`duration`?Q(Kx(e,Jx(t.value,t.unit),Jx(n.value,n.unit))):$(`wrong-type`,`cannot compare a 'duration' value with a '${n.kind}' value`);case`complex`:return e!==`eq`&&e!==`neq`?$(`wrong-type`,`ordering operator '${e}' is not defined for complex values; the complex plane has no total order`):n.kind===`complex`?Fb(t.unit,n.unit)?Q(e===`eq`?t.re===n.re&&t.im===n.im:t.re!==n.re||t.im!==n.im):$(`wrong-type`,`cannot compare complex values with incompatible units`):$(`wrong-type`,`cannot compare a 'complex' value with a '${n.kind}' value`);default:throw Error(`unreachable computed-value kind`)}}function $x(e,t,n){if(t.kind!==`text`)return $(`wrong-type`,`'textCompare' requires 'text' operands; the left operand is '${t.kind}'`);if(n.kind!==`text`)return $(`wrong-type`,`'textCompare' requires 'text' operands; the right operand is '${n.kind}'`);switch(e){case`equals`:return Q(t.value===n.value);case`notEquals`:return Q(t.value!==n.value);case`matches`:case`notMatches`:{let r;try{r=new RegExp(n.value)}catch{return $(`wrong-type`,`'${n.value}' is not a valid regular expression pattern`)}let i=r.test(t.value);return Q(e===`matches`?i:!i)}case`portableMatches`:case`portableNotMatches`:{let r;try{r=Ux(n.value)}catch(e){let t=e instanceof Ex?e.message:String(e);return $(`wrong-type`,`'${n.value}' is not a valid trilean-regex pattern: ${t}`)}let i=r.test(t.value);return Q(e===`portableMatches`?i:!i)}default:throw Error(`unreachable text comparison operator`)}}function eS(e,t){switch(e.kind){case`number`:return t.kind===`number`?Fb(e.unit,t.unit)?Q(e.value===t.value):$(`wrong-type`,`cannot compare numbers with incompatible units for membership`):$(`wrong-type`,`cannot compare a 'number' value with a '${t.kind}' value for membership`);case`text`:return t.kind===`text`?Q(e.value===t.value):$(`wrong-type`,`cannot compare a 'text' value with a '${t.kind}' value for membership`);case`boolean`:return t.kind===`boolean`?Q(e.value===t.value):$(`wrong-type`,`cannot compare a 'boolean' value with a '${t.kind}' value for membership`);case`instant`:{if(t.kind!==`instant`)return $(`wrong-type`,`cannot compare an 'instant' value with a '${t.kind}' value for membership`);let n=Yx(e.value);if(n===void 0)return Xx(e.value);let r=Yx(t.value);return r===void 0?Xx(t.value):Q(n===r)}case`duration`:return t.kind===`duration`?Q(Jx(e.value,e.unit)===Jx(t.value,t.unit)):$(`wrong-type`,`cannot compare a 'duration' value with a '${t.kind}' value for membership`);case`complex`:return t.kind===`complex`?Fb(e.unit,t.unit)?Q(e.re===t.re&&e.im===t.im):$(`wrong-type`,`cannot compare complex values with incompatible units for membership`):$(`wrong-type`,`cannot compare a 'complex' value with a '${t.kind}' value for membership`);default:throw Error(`unreachable computed-value kind`)}}function tS(e){return Fb(e,void 0)}function nS(e){switch(e.kind){case`number`:return Q({kind:`number`,value:-e.value,unit:e.unit});case`duration`:return Q({kind:`duration`,value:-e.value,unit:e.unit});case`complex`:return Q({kind:`complex`,re:-e.re,im:-e.im,unit:e.unit});case`text`:case`instant`:case`boolean`:return $(`wrong-type`,`cannot negate a '${e.kind}' value`);default:throw Error(`unreachable computed-value kind`)}}function rS(e,t,n){switch(e){case`add`:return Fb(t.unit,n.unit)?Q({kind:`number`,value:t.value+n.value,unit:t.unit}):$(`wrong-type`,`cannot add numbers with incompatible units`);case`subtract`:return Fb(t.unit,n.unit)?Q({kind:`number`,value:t.value-n.value,unit:t.unit}):$(`wrong-type`,`cannot subtract numbers with incompatible units`);case`multiply`:return Q({kind:`number`,value:t.value*n.value,unit:Ib(t.unit,n.unit)});case`divide`:return n.value===0?$(`domain-error`,`division by zero`):Q({kind:`number`,value:t.value/n.value,unit:Lb(t.unit,n.unit)});case`power`:return!tS(t.unit)||!tS(n.unit)?$(`wrong-type`,`'power' requires dimensionless operands`):t.value<0&&!Number.isInteger(n.value)?$(`domain-error`,`a negative base raised to a non-integer power is not a real number`):t.value===0&&n.value<0?$(`domain-error`,`zero raised to a negative power is a division by zero`):Q({kind:`number`,value:t.value**n.value});case`modulo`:return!tS(t.unit)||!tS(n.unit)?$(`wrong-type`,`'modulo' requires dimensionless operands`):n.value===0?$(`domain-error`,`modulo by zero`):Q({kind:`number`,value:t.value%n.value});default:throw Error(`unreachable arithmetic operator`)}}function iS(e,t,n){switch(e){case`add`:return Q({kind:`duration`,value:Jx(t.value,t.unit)+Jx(n.value,n.unit),unit:`ms`});case`subtract`:return Q({kind:`duration`,value:Jx(t.value,t.unit)-Jx(n.value,n.unit),unit:`ms`});case`multiply`:case`divide`:case`power`:case`modulo`:return $(`wrong-type`,`arithmetic operator '${e}' is not defined between two 'duration' values`);default:throw Error(`unreachable arithmetic operator`)}}function aS(e){return e.kind===`complex`?e:{kind:`complex`,re:e.value,im:0,unit:e.unit}}function oS(e,t){return{kind:`complex`,re:e.re*t.re-e.im*t.im,im:e.re*t.im+e.im*t.re,unit:Ib(e.unit,t.unit)}}function sS(e,t,n){switch(e){case`add`:return Fb(t.unit,n.unit)?Q({kind:`complex`,re:t.re+n.re,im:t.im+n.im,unit:t.unit}):$(`wrong-type`,`cannot add complex values with incompatible units`);case`subtract`:return Fb(t.unit,n.unit)?Q({kind:`complex`,re:t.re-n.re,im:t.im-n.im,unit:t.unit}):$(`wrong-type`,`cannot subtract complex values with incompatible units`);case`multiply`:return Q(oS(t,n));case`divide`:{let e=n.re*n.re+n.im*n.im;return e===0?$(`domain-error`,`division by zero`):Q({kind:`complex`,re:(t.re*n.re+t.im*n.im)/e,im:(t.im*n.re-t.re*n.im)/e,unit:Lb(t.unit,n.unit)})}case`modulo`:return $(`domain-error`,`'modulo' is undefined for complex values`);default:throw Error(`unreachable arithmetic operator`)}}function cS(e,t){if(t.kind!==`number`||!Number.isInteger(t.value))return $(`wrong-type`,`'power' with a complex operand requires a real integer exponent`);if(!tS(e.unit)||!tS(t.unit))return $(`wrong-type`,`'power' requires dimensionless operands`);let n={kind:`complex`,re:1,im:0,unit:{}},r=aS(e),i=n;for(let e=0;e<Math.abs(t.value);e+=1)i=oS(i,r);return t.value>=0?Q(i):sS(`divide`,n,i)}function lS(e,t,n){if(t.kind===`instant`&&n.kind===`instant`&&e===`subtract`){let e=Yx(t.value);if(e===void 0)return Xx(t.value);let r=Yx(n.value);return r===void 0?Xx(n.value):Q({kind:`duration`,value:e-r,unit:`ms`})}if(t.kind===`instant`&&n.kind===`duration`&&e===`add`){let e=Yx(t.value);return e===void 0?Xx(t.value):Zx(e+Jx(n.value,n.unit))}if(t.kind===`duration`&&n.kind===`instant`&&e===`add`){let e=Yx(n.value);return e===void 0?Xx(n.value):Zx(e+Jx(t.value,t.unit))}return t.kind===`instant`||n.kind===`instant`?$(`wrong-type`,`arithmetic operator '${e}' is not defined between a '${t.kind}' and a '${n.kind}' value`):t.kind===`duration`&&n.kind===`duration`?iS(e,t,n):t.kind===`duration`||n.kind===`duration`?$(`wrong-type`,`arithmetic operator '${e}' is not defined between a '${t.kind}' and a '${n.kind}' value`):t.kind!==`number`&&t.kind!==`complex`?$(`wrong-type`,`arithmetic requires numeric operands; got a '${t.kind}' value`):n.kind!==`number`&&n.kind!==`complex`?$(`wrong-type`,`arithmetic requires numeric operands; got a '${n.kind}' value`):t.kind===`complex`||n.kind===`complex`?e===`power`?cS(t,n):sS(e,aS(t),aS(n)):rS(e,t,n)}function uS(e,t){if(e!==void 0){if(t.kind!==`number`&&t.kind!==`complex`)return $(`wrong-type`,`a unit was expected on a reference that resolved to a non-numeric value`);if(!Fb(e,t.unit))return $(`wrong-type`,`the resolved value's unit does not match the reference's expected unit`)}}function dS(e,t,n){let r=Object.hasOwn(e,t)?e[t]:void 0;if(r===void 0)return $(`wrong-type`,`no function registered under the name '${t}'`);let i=r(n);return`domainError`in i?$(`domain-error`,i.domainError):Q(i)}async function fS(e,t,n,r,i,a,o,s,c){let l=s.checkNode(c);if(l!==void 0)return l;switch(e.kind){case`not`:{let l=await fS(e.operand,t,n,r,i,a,o,s,c+1);return l.status===`indeterminate`?l:Q(!l.value)}case`and`:{let[l,u]=await Promise.all([fS(e.left,t,n,r,i,a,o,s,c+1),fS(e.right,t,n,r,i,a,o,s,c+1)]);return Wx(l,u)}case`or`:{let[l,u]=await Promise.all([fS(e.left,t,n,r,i,a,o,s,c+1),fS(e.right,t,n,r,i,a,o,s,c+1)]);return Gx(l,u)}case`allOf`:return(await Promise.all(e.operands.map(async e=>fS(e,t,n,r,i,a,o,s,c+1)))).reduce(Wx,Q(!0));case`anyOf`:return(await Promise.all(e.operands.map(async e=>fS(e,t,n,r,i,a,o,s,c+1)))).reduce(Gx,Q(!1));case`compare`:{let[l,u]=await Promise.all([pS(e.left,t,n,r,i,a,o,s,c+1),pS(e.right,t,n,r,i,a,o,s,c+1)]);return l.status===`indeterminate`?l:u.status===`indeterminate`?u:Qx(e.op,l.value,u.value)}case`textCompare`:{let[l,u]=await Promise.all([pS(e.left,t,n,r,i,a,o,s,c+1),pS(e.right,t,n,r,i,a,o,s,c+1)]);return l.status===`indeterminate`?l:u.status===`indeterminate`?u:$x(e.op,l.value,u.value)}case`memberOf`:{let l=await pS(e.operand,t,n,r,i,a,o,s,c+1);if(l.status===`indeterminate`)return l;let u=await Promise.all(e.candidates.map(async e=>{let u=await pS(e,t,n,r,i,a,o,s,c+1);return u.status===`indeterminate`?u:eS(l.value,u.value)}));for(let t of u)if(t.status===`definite`&&t.value)return Q(e.op===`in`);let d=Rb(...u);return d===void 0?Q(e.op===`notIn`):{status:`indeterminate`,reason:d}}case`exists`:{let l=await pS(e.operand,t,n,r,i,a,o,s,c+1);return l.status===`indeterminate`&&l.reason.code===`not-found`?Q(!1):Q(!0)}case`some`:case`every`:{let r=await Sx(fS,e.collection,e.filter,t,n,i,a,o,s,c+1),l=(await Promise.all(r.map(async({item:t,filterOutcome:r})=>{if(r!==`exclude`)return r===`include`?fS(e.item,t,n,void 0,i,a,o,s,c+1):r}))).filter(e=>e!==void 0),u=e.kind===`some`?Gx:Wx,d=e.kind===`some`?Q(!1):Q(!0);return l.reduce(u,d)}case`treeReference`:{if(n.resolveTree===void 0)return $(`wrong-type`,`no tree resolver registered for treeReference nodes`);let l=JSON.stringify(e.key);if(a.has(l))return $(`domain-error`,`circular treeReference detected`);if(o>=100)return $(`domain-error`,`treeReference chain exceeds the maximum depth of 100`);let u=await n.resolveTree(e.key,t);if(!u.found)return $(`not-found`,`treeReference key did not resolve to a tree`);let d=rx.safeParse(u.node);return d.success?fS(d.data,t,n,r,i,new Set([...a,l]),o+1,s,c+1):$(`wrong-type`,`the referenced tree is not a valid PredicateNode`)}default:throw Error(`unreachable predicate node kind`)}}async function pS(e,t,n,r,i,a,o,s,c){let l=s.checkNode(c);if(l!==void 0)return l;switch(e.kind){case`reference`:{let r=await n.resolveValue(e.key,t);if(!r.found)return $(`not-found`,`no value found for reference key ${JSON.stringify(e.key)}`);let i=uS(e.unit,r.value);return i===void 0?Q(r.value):i}case`accumulator`:return r===void 0?$(`wrong-type`,`accumulator used outside a reduce fold's combine expression`):Q(r);case`call`:{let l=await Promise.all(e.args.map(async e=>pS(e,t,n,r,i,a,o,s,c+1))),u=[];for(let e of l){if(e.status===`indeterminate`)return e;u.push(e.value)}return dS(i,e.fn,u)}case`numberLiteral`:return Q({kind:`number`,value:e.value,unit:e.unit});case`textLiteral`:return Q({kind:`text`,value:e.value});case`booleanLiteral`:return Q({kind:`boolean`,value:e.value});case`instantLiteral`:return Q({kind:`instant`,value:e.value});case`durationLiteral`:return Q({kind:`duration`,value:e.value,unit:e.unit});case`complexLiteral`:return`re`in e?Q({kind:`complex`,re:e.re,im:e.im,unit:e.unit}):Q(jb(e.magnitude,e.phase,e.unit));case`arithmetic`:{let[l,u]=await Promise.all([pS(e.left,t,n,r,i,a,o,s,c+1),pS(e.right,t,n,r,i,a,o,s,c+1)]);return l.status===`indeterminate`?l:u.status===`indeterminate`?u:lS(e.op,l.value,u.value)}case`negate`:{let l=await pS(e.operand,t,n,r,i,a,o,s,c+1);return l.status===`indeterminate`?l:nS(l.value)}case`lookup`:{let l=await Promise.all(e.keys.map(async e=>pS(e,t,n,r,i,a,o,s,c+1))),u=[];for(let e of l){if(e.status===`indeterminate`)return e;u.push(e.value)}let d=await n.resolveLookup(e.table,u,t);return d.found?Q(d.value):$(`not-found`,`no match found in lookup table ${JSON.stringify(e.table)}`)}case`conditional`:{if((e.hitPolicy??`first`)===`first`){for(let{when:l,then:u}of e.cases){let e=await fS(l,t,n,r,i,a,o,s,c+1);if(e.status===`indeterminate`)return e;if(e.value)return pS(u,t,n,r,i,a,o,s,c+1)}return pS(e.fallback,t,n,r,i,a,o,s,c+1)}let l=await Promise.all(e.cases.map(async({when:e,then:l})=>({then:l,whenResult:await fS(e,t,n,r,i,a,o,s,c+1)}))),u=l.filter(({whenResult:e})=>e.status===`definite`&&e.value);if(u.length>=2)return $(`domain-error`,`more than one case matched under the 'unique' hit policy`);let d=Rb(...l.map(({whenResult:e})=>e));if(d!==void 0)return{status:`indeterminate`,reason:d};let[f]=u;return pS(f===void 0?e.fallback:f.then,t,n,r,i,a,o,s,c+1)}case`fold`:{let r=await Sx(fS,e.collection,e.filter,t,n,i,a,o,s,c+1),l=Cx(r);if(l!==void 0)return{status:`indeterminate`,reason:l};let u=r.filter(({filterOutcome:e})=>e===`include`).map(({item:e})=>e);if(e.combiner.mode===`reduce`){let r=await pS(e.combiner.initial,t,n,void 0,i,a,o,s,c+1);if(r.status===`indeterminate`)return r;let l=r.value;for(let t of u){let r=await pS(e.combiner.combine,t,n,l,i,a,o,s,c+1);if(r.status===`indeterminate`)return r;l=r.value}return Q(l)}if(u.length===0)return $(`domain-error`,`'${e.combiner.mode}' has no participating items to seed a running result from`);let d=e.combiner.mode===`max`?`gt`:`lt`,f;for(let t of u){let r=await pS(e.combiner.item,t,n,void 0,i,a,o,s,c+1);if(r.status===`indeterminate`)return r;if(f===void 0){f=r.value;continue}let l=Qx(d,r.value,f);if(l.status===`indeterminate`)return l;l.value&&(f=r.value)}if(f===void 0)throw Error(`unreachable: max/min over a non-empty participating list produced no running result`);return Q(f)}case`delegate`:{if(n.resolveDelegate===void 0)return $(`wrong-type`,`no delegate handler registered for external system '${e.system}'`);let r=await n.resolveDelegate(e.system,e.payload,t);return r.found?Q(r.value):$(`not-found`,`delegate handler for external system '${e.system}' reported no value`)}case`treeReference`:{if(n.resolveTree===void 0)return $(`wrong-type`,`no tree resolver registered for treeReference nodes`);let l=JSON.stringify(e.key);if(a.has(l))return $(`domain-error`,`circular treeReference detected`);if(o>=100)return $(`domain-error`,`treeReference chain exceeds the maximum depth of 100`);let u=await n.resolveTree(e.key,t);if(!u.found)return $(`not-found`,`treeReference key did not resolve to a tree`);let d=vx.safeParse(u.node);return d.success?pS(d.data,t,n,r,i,new Set([...a,l]),o+1,s,c+1):$(`wrong-type`,`the referenced tree is not a valid ExpressionNode`)}default:throw Error(`unreachable expression node kind`)}}function mS({functions:e=yx,maxNodes:t=bx,maxNestingDepth:n=500}){return{evaluatePredicate:async(r,i,a)=>fS(r,i,a,void 0,e,new Set,0,xx(t,n),0),evaluateValue:async(r,i,a)=>pS(r,i,a,void 0,e,new Set,0,xx(t,n),0)}}var{evaluatePredicate:hS,evaluateValue:gS}=mS({}),_S=Kg(rx),vS=`bearer-is`,yS=`expires-at`,bS=`scope-narrows`,xS=`capability-is`,SS=`depth-remaining`,CS=[vS,yS,bS,xS,SS];function wS(e){return e===`bearer-is`||e===`expires-at`||e===`scope-narrows`||e===`capability-is`||e===`depth-remaining`}function TS(e){return{found:!0,value:{kind:`boolean`,value:e}}}var ES={[vS]:(e,t)=>t.parentClaims===void 0?TS(!1):TS(Hy(t.parentClaims.bearer,t.childIssuer)),[yS]:(e,t)=>t.parentClaims===void 0?TS(!1):TS(t.candidate.expires<=t.parentClaims.expires),[bS]:(e,t)=>t.parentClaims===void 0?TS(!1):TS(Gy(t.parentClaims.scope,t.candidate.scope)),[xS]:(e,t)=>t.parentClaims===void 0?TS(!1):TS(t.parentClaims.capability===t.candidate.capability),[SS]:(e,t)=>{if(t.parentClaims===void 0)return TS(!1);let n=t.parentClaims[`delegations-remaining`];return TS(n===void 0||t.candidate.delegationsRemaining!==void 0&&t.candidate.delegationsRemaining<n)}};function DS(e){return{kind:`compare`,op:`eq`,left:{kind:`delegate`,system:e,payload:null},right:{kind:`booleanLiteral`,value:!0}}}var OS=async()=>Promise.resolve({found:!1}),kS=async()=>Promise.resolve({found:!1}),AS=async()=>Promise.resolve([]);async function jS(e,t,n){let r={childIssuer:t,candidate:n,parentClaims:e},i={resolveValue:OS,resolveLookup:kS,resolveCollection:AS,resolveDelegate:async(e,t)=>wS(e)?ES[e](t,r):{found:!1}};for(let e of CS){let t=await hS(DS(e),r,i);if(t.status!==`definite`||!t.value)return e}}async function MS(e,t,n,r={}){let i={clock:n,claims:t},a={resolveValue:OS,resolveLookup:kS,resolveCollection:AS,resolveDelegate:async(e,t)=>{let n=Object.hasOwn(r,e)?r[e]:void 0;if(n===void 0)return{found:!1};try{return await n(t,i)}catch{return{found:!1}}}};for(let t of e){let e=await hS(t,i,a);if(e.status!==`definite`||!e.value)return{ok:!1,reason:`not_satisfied`}}return{ok:!0}}function NS(e,t){return hc([`Signature1`,e,new Uint8Array,t],Qs)}function PS(e){return Uint8Array.from(e)}function FS(e){return PS(hc(e,Qs))}function IS(e){return FS({1:e.identityKey.alg,4:e.deviceId})}function LS(e){let[,,t]=e;if(t===null)return;let n;try{n=rl(t,il)}catch{return}let r=ty.safeParse(n);return r.success?r.data:void 0}async function RS(e,t){let n=await BS(e,{identity:t.identity,clock:t.clock,revocation:t.revocation,...t.extraPredicateResolvers===void 0?{}:{extraPredicateResolvers:t.extraPredicateResolvers}});return n.ok&&t.expectedBearer!==void 0&&!Hy(n.claims.bearer,t.expectedBearer)?{ok:!1,reason:`bearer_mismatch`}:n}async function zS(e,t,n){if(Hy(e.issuer,t.issuer))return!0;if(e.authorization===void 0)return!1;let r;try{r=rl(e.authorization,il)}catch{return!1}let i=ey.safeParse(r);if(!i.success)return!1;let a=await RS(i.data,{...n,expectedBearer:e.issuer});return a.ok&&a.claims.capability===`manage:revoke`&&Gy(a.claims.scope,t.scope)}async function BS(e,t){let[n,,r,i]=e;if(r===null)return{ok:!1,reason:`malformed`};let a;try{a=rl(r,il)}catch{return{ok:!1,reason:`malformed`}}let o=ty.safeParse(a);if(!o.success)return{ok:!1,reason:`malformed`};let s=o.data;if(!await t.identity.verify(s[`issuer-key`],NS(n,r),i))return{ok:!1,reason:`bad_signature`};if(!Hy(await t.identity.deriveDeviceId(s[`issuer-key`][`public-key`]),s.issuer))return{ok:!1,reason:`wrong_issuer`};let c=t.clock.now();if(s.expires<=c)return{ok:!1,reason:`expired`};if(s[`not-before`]!==void 0&&s[`not-before`]>c)return{ok:!1,reason:`not_yet_valid`};let l=s[`valid-until`];if(l!==void 0&&l<=c)return{ok:!1,reason:`content_expired`};let u=await t.revocation.entriesFor(s[`token-id`]);for(let e of u)if(await zS(e,s,t))return{ok:!1,reason:`revoked`};if(s.conditions!==void 0){let e;try{e=rl(s.conditions,il)}catch{return{ok:!1,reason:`conditions_invalid`}}let n=_S.safeParse(e);if(!n.success)return{ok:!1,reason:`conditions_invalid`};if(!(await MS(n.data,s,t.clock,t.extraPredicateResolvers)).ok)return{ok:!1,reason:`conditions_not_satisfied`}}if(s.parent!==void 0){let e;try{e=rl(s.parent,il)}catch{return{ok:!1,reason:`parent_invalid`}}let n=ey.safeParse(e);if(!n.success)return{ok:!1,reason:`parent_invalid`};let r=await BS(n.data,t);if(!r.ok)return{ok:!1,reason:`parent_invalid`};let i={capability:s.capability,scope:s.scope,expires:s.expires,...s[`delegations-remaining`]===void 0?{}:{delegationsRemaining:s[`delegations-remaining`]}};return await jS(r.claims,s.issuer,i)===void 0?{ok:!0,claims:s,rootIssuer:r.rootIssuer,rootIssuerKey:r.rootIssuerKey,depth:r.depth+1}:{ok:!1,reason:`delegation_exceeds_parent`}}return{ok:!0,claims:s,rootIssuer:s.issuer,rootIssuerKey:s[`issuer-key`],depth:0}}var VS={"bearer-is":`parent_bearer_mismatch`,"expires-at":`expires_exceeds_parent`,"scope-narrows":`scope_does_not_narrow`,"capability-is":`capability_mismatch`,"depth-remaining":`delegation_exceeds_parent`};async function HS(e,t,n){let r=await jS(e,t,n);return r===void 0?void 0:VS[r]}async function US(e){if(e.expires<=e.clock.now())return{ok:!1,reason:`already_expired`};let t;if(e.parent!==void 0){let n=LS(e.parent);if(n===void 0)return{ok:!1,reason:`parent_malformed`};let r=await HS(n,e.identity.deviceId,{capability:e.capability,scope:e.scope,expires:e.expires,...e.delegationsRemaining===void 0?{}:{delegationsRemaining:e.delegationsRemaining}});if(r!==void 0)return{ok:!1,reason:r};t=FS(e.parent)}let n=FS({"token-id":e.tokenId,issuer:e.identity.deviceId,"issuer-key":e.identity.identityKey,bearer:e.bearer,capability:e.capability,scope:e.scope,expires:e.expires,...e.notBefore===void 0?{}:{"not-before":e.notBefore},...t===void 0?{}:{parent:t},...e.delegationsRemaining===void 0?{}:{"delegations-remaining":e.delegationsRemaining},...e.conditions===void 0?{}:{conditions:FS(e.conditions)}}),r=IS(e.identity);return{ok:!0,token:[r,{},n,await e.identity.sign(NS(r,n))]}}var WS=`webrtc:signal`,GS={kind:`node`};function KS(e){return typeof e==`object`&&`verb`in e&&e.verb===`webrtc.offer`}function qS(e){return typeof e==`object`&&`verb`in e&&e.verb===`webrtc.answer`}function JS(e){return typeof e==`object`&&`verb`in e&&e.verb===`webrtc.ice-candidate`}function YS(e,t){return{verb:WS,params:{verb:`webrtc.offer`,"negotiation-id":e,sdp:t}}}function XS(e,t){return{verb:WS,params:{verb:`webrtc.answer`,"negotiation-id":e,sdp:t}}}function ZS(e,t){return{verb:WS,params:{verb:`webrtc.ice-candidate`,"negotiation-id":e,...t===void 0?{}:{candidate:t}}}}function QS(e){return{candidate:e.candidate,...e.sdpMid===null?{}:{"sdp-mid":e.sdpMid},...e.sdpMLineIndex===null?{}:{"sdp-m-line-index":e.sdpMLineIndex},...e.usernameFragment===null?{}:{"username-fragment":e.usernameFragment}}}function $S(e){return{candidate:e.candidate,...e[`sdp-mid`]===void 0?{}:{sdpMid:e[`sdp-mid`]},...e[`sdp-m-line-index`]===void 0?{}:{sdpMLineIndex:e[`sdp-m-line-index`]},...e[`username-fragment`]===void 0?{}:{usernameFragment:e[`username-fragment`]}}}function eC(){let e=0;return()=>{let t=e;return e+=1,t}}async function tC(e,t){if(e.token===void 0)return!1;let n=await RS(e.token,t);return n.ok?n.claims.capability===`webrtc:signal`&&n.claims.scope.kind===GS.kind:!1}function nC(e){let t=[],n=[],r=!1,i=null;function a(){r=!0;for(let e of n.splice(0))e.resolve({value:void 0,done:!0})}function o(e){i=e,r=!0;for(let t of n.splice(0))t.reject(e)}e.addEventListener(`message`,r=>{if(!(r.data instanceof ArrayBuffer)){o(Error(`expected a binary data channel message`)),e.close();return}let i;try{i=ub(r.data)}catch(t){if(t instanceof lb)return;o(t instanceof Error?t:Error(`frame body failed to decode: ${String(t)}`)),e.close();return}let a=n.shift();a?a.resolve({value:i,done:!1}):t.push(i)}),e.addEventListener(`close`,a),e.addEventListener(`error`,a);let s={[Symbol.asyncIterator](){return{next:async()=>c()}}};async function c(){let e=t.shift();return e===void 0?i===null?r?Promise.resolve({value:void 0,done:!0}):new Promise((e,t)=>{n.push({resolve:e,reject:t})}):Promise.reject(i):Promise.resolve({value:e,done:!1})}return{async send(t){return e.readyState===`open`?(e.send(sb(t)),Promise.resolve()):Promise.reject(Error(`data channel is not open (state: ${e.readyState})`))},receive:()=>s,async close(){return e.close(),Promise.resolve()}}}var rC=`wire-mesh`,iC={entriesFor:async()=>Promise.resolve([])};function aC(e,t){for(let n of t.localTracks??[])e.addTrack(n);t.onRemoteTrack!==void 0&&e.addEventListener(`track`,t.onRemoteTrack)}function oC(e,t){e.addEventListener(`open`,()=>{t(nC(e))},{once:!0})}function sC(e,t){let n={identity:t.identity,clock:t.clock,revocation:iC},r=new Map,i=new Map,a=eC();async function o(t,n){let r=ZS(t,n===null?void 0:QS(n));await e.sendManageRequest(r,GS,i.get(t))}async function s(a,s){if(!await tC(a,n)){await a.respond({result:`error`,code:`unauthorized`});return}let c=s[`negotiation-id`];i.set(c,a.fromDevice);let l=new RTCPeerConnection;r.set(c,l),aC(l,t),l.addEventListener(`icecandidate`,e=>{o(c,e.candidate)}),l.addEventListener(`datachannel`,e=>{e.channel.binaryType=`arraybuffer`,oC(e.channel,t.onIncomingConnection)}),await l.setRemoteDescription({type:`offer`,sdp:s.sdp});let u=await l.createAnswer();await l.setLocalDescription(u),await a.respond({result:`ok`}),await e.sendManageRequest(XS(c,u.sdp??``),GS,a.fromDevice)}async function c(e,t){let n=r.get(t[`negotiation-id`]);n!==void 0&&await n.setRemoteDescription({type:`answer`,sdp:t.sdp}),await e.respond({result:`ok`})}async function l(e,t){let n=r.get(t[`negotiation-id`]);n!==void 0&&await n.addIceCandidate(t.candidate===void 0?null:$S(t.candidate)),await e.respond({result:`ok`})}async function u(){for await(let t of e.incomingManageRequests){if(t.command.verb!==`webrtc:signal`)continue;let e=t.command.params;KS(e)?await s(t,e):qS(e)?await c(t,e):JS(e)&&await l(t,e)}}return u(),{async initiate(n){let s=a();i.set(s,n);let c=new RTCPeerConnection;r.set(s,c),aC(c,t),c.addEventListener(`icecandidate`,e=>{o(s,e.candidate)});let l=c.createDataChannel(rC);l.binaryType=`arraybuffer`;let u=new Promise((e,t)=>{oC(l,e),l.addEventListener(`error`,()=>{t(Error(`data channel failed to open`))},{once:!0})}),d=await c.createOffer();await c.setLocalDescription(d);let f=await e.sendManageRequest(YS(s,d.sdp??``),GS,n);if(f.result===`error`)throw r.delete(s),i.delete(s),c.close(),Error(`webrtc offer rejected: ${f.code}`);return u}}}function cC(e){let[t,n]=(0,O.useState)(void 0);return(0,O.useEffect)(()=>{let t={cancelled:!1};return(async()=>{for await(let r of e.events){if(t.cancelled)return;n(r)}})(),()=>{t.cancelled=!0}},[e]),t}var lC=16;function uC(e){let t=``;for(let n of e)t+=n.toString(lC).padStart(2,`0`);return t}function dC(e){if(e.state.status!==`connected`)return``;switch(e.state.handshake.status){case`pending`:return` · handshake pending`;case`negotiated`:return` · v${String(e.state.handshake.version)} · ${e.state.handshake.sharedDomains.join(`, `)}`;case`unanswered`:return` · handshake unanswered (relay-only node?)`;case`rejected`:return` · handshake rejected (${e.state.handshake.reason})`}return``}function fC(e){let{state:t}=e;switch(t.status){case`connecting`:return`connecting…`;case`connected`:return`connected${dC(e)}`;case`reconnecting`:return`reconnecting (attempt ${String(t.attempt)}, ${t.reason})…`;case`closed`:return`closed (${t.reason})`;case`idle`:return`idle`}return``}function pC(e){return JSON.stringify(e,(e,t)=>t instanceof Uint8Array?`<${String(t.byteLength)} bytes>`:t)}function mC({address:e,session:t,onClose:n,onMessagePeer:r}){let i=cC(t),a=i===void 0?`idle`:fC(i),o=i?.directory??[],s=i?.frameLog??[];return(0,M.jsxs)(Ia,{withBorder:!0,padding:`md`,radius:`md`,children:[(0,M.jsxs)(mi,{justify:`space-between`,mb:`xs`,children:[(0,M.jsx)(Yi,{fw:600,children:e}),(0,M.jsxs)(mi,{children:[(0,M.jsx)(ka,{size:`xs`,disabled:i?.state.status!==`connected`,onClick:()=>{t.sendPing()},children:`Send ping`}),(0,M.jsx)(ka,{size:`xs`,color:`red`,variant:`light`,onClick:n,children:`Disconnect`})]})]}),(0,M.jsx)(Yi,{fw:600,size:`sm`,mb:`sm`,children:a}),(0,M.jsx)(Yi,{fw:600,size:`sm`,children:`Peer directory`}),o.length===0?(0,M.jsx)(Yi,{size:`sm`,c:`dimmed`,children:`No gossip received yet.`}):(0,M.jsxs)(F,{striped:!0,children:[(0,M.jsx)(F.Thead,{children:(0,M.jsxs)(F.Tr,{children:[(0,M.jsx)(F.Th,{children:`device`}),(0,M.jsx)(F.Th,{children:`addresses`}),(0,M.jsx)(F.Th,{children:`snapshot (unix s)`}),(0,M.jsx)(F.Th,{})]})}),(0,M.jsx)(F.Tbody,{children:o.map(e=>(0,M.jsxs)(F.Tr,{children:[(0,M.jsx)(F.Td,{children:uC(e.device)}),(0,M.jsx)(F.Td,{children:e.advert.addresses.join(`, `)}),(0,M.jsx)(F.Td,{children:e.advert[`snapshot-seconds`]}),(0,M.jsx)(F.Td,{children:(0,M.jsx)(ka,{size:`xs`,onClick:()=>{r(e.device)},children:`Message`})})]},uC(e.device)))})]}),(0,M.jsx)(Yi,{fw:600,size:`sm`,mt:`md`,children:`Frame log`}),(0,M.jsx)(F.ScrollContainer,{minWidth:0,h:384,children:(0,M.jsxs)(F,{children:[(0,M.jsx)(F.Thead,{children:(0,M.jsxs)(F.Tr,{children:[(0,M.jsx)(F.Th,{children:`direction`}),(0,M.jsx)(F.Th,{children:`frame`})]})}),(0,M.jsx)(F.Tbody,{children:s.map((e,t)=>(0,M.jsxs)(F.Tr,{children:[(0,M.jsx)(F.Td,{children:e.direction}),(0,M.jsx)(F.Td,{children:pC(e.frame)})]},t))})]})})]})}function hC({peers:e,onConnect:t,onDismiss:n}){return e.length===0?null:(0,M.jsxs)(Ia,{withBorder:!0,padding:`md`,radius:`md`,"data-testid":`discovered-peers`,children:[(0,M.jsx)(Yi,{fw:600,size:`sm`,mb:`xs`,children:`Discovered peers`}),(0,M.jsxs)(F,{striped:!0,children:[(0,M.jsx)(F.Thead,{children:(0,M.jsxs)(F.Tr,{children:[(0,M.jsx)(F.Th,{children:`device`}),(0,M.jsx)(F.Th,{children:`addresses`}),(0,M.jsx)(F.Th,{})]})}),(0,M.jsx)(F.Tbody,{children:e.map(e=>(0,M.jsxs)(F.Tr,{children:[(0,M.jsx)(F.Td,{children:uC(e.device)}),(0,M.jsx)(F.Td,{children:e.addresses.join(`, `)}),(0,M.jsx)(F.Td,{children:(0,M.jsxs)(mi,{gap:`xs`,children:[(0,M.jsx)(ka,{size:`xs`,onClick:()=>{t(e.key)},children:`Connect`}),(0,M.jsx)(ka,{size:`xs`,variant:`light`,color:`red`,onClick:()=>{n(e.key)},children:`Dismiss`})]})})]},e.key))})]})]})}function gC(e,t){return e.sentAt===t.sentAt?Ey(e.messageId).localeCompare(Ey(t.messageId)):e.sentAt-t.sentAt}function _C(e,t){let n=new Set(e.map(e=>Ey(e.messageId))),r=t.filter(e=>!n.has(Ey(e.messageId)));return r.length===0?e:[...e,...r].sort(gC)}function vC(e,t,n){let r=e.get(t);return r===void 0?e:new Map(e).set(t,n(r))}function yC(e,t){switch(t.type){case`opened`:{let n=e.get(t.roomPath);return new Map(e).set(t.roomPath,{roomPath:t.roomPath,participants:t.participants,session:t.session,token:void 0,status:`connected`,messages:n?.messages??[],notices:[],outgoing:n?.outgoing??[],pendingJoinRequest:void 0,unread:n?.unread??0})}case`restored`:return e.get(t.roomPath)===void 0?new Map(e).set(t.roomPath,{roomPath:t.roomPath,participants:t.participants,session:void 0,token:void 0,status:`closed`,messages:_C([],t.messages),notices:[],outgoing:[],pendingJoinRequest:void 0,unread:0}):vC(e,t.roomPath,e=>({...e,messages:_C(e.messages,t.messages)}));case`notices`:return vC(e,t.roomPath,e=>({...e,notices:t.notices}));case`message`:return vC(e,t.roomPath,e=>{let n=_C(e.messages,[t.message]),r=n!==e.messages;return{...e,messages:n,unread:r&&t.message.direction===`received`?e.unread+1:e.unread}});case`read`:return vC(e,t.roomPath,e=>e.unread===0?e:{...e,unread:0});case`outgoing`:return vC(e,t.roomPath,e=>({...e,outgoing:e.outgoing.some(e=>e.localId===t.entry.localId)?e.outgoing.map(e=>e.localId===t.entry.localId?t.entry:e):[...e.outgoing,t.entry]}));case`outgoing-removed`:return vC(e,t.roomPath,e=>({...e,outgoing:e.outgoing.filter(e=>e.localId!==t.localId)}));case`join-request`:return vC(e,t.roomPath,e=>({...e,pendingJoinRequest:t.request}));case`join-request-settled`:return vC(e,t.roomPath,e=>({...e,pendingJoinRequest:void 0}));case`token`:return vC(e,t.roomPath,e=>({...e,token:t.token}));case`closed`:return vC(e,t.roomPath,e=>({...e,status:`closed`}))}return e}function bC(e,t){let n=Tb(e);return n.kind===`dm`?n.participants.filter(e=>e!==t):n.owner===t?[]:[n.owner]}var xC=12;function SC(e){return e.participants.length===0?e.roomPath:e.participants.map(e=>e.slice(0,xC)).join(`, `)}function CC({conversations:e,selected:t,onSelect:n}){return e.length===0?null:(0,M.jsxs)(Za,{gap:0,"data-testid":`conversation-list`,children:[(0,M.jsx)(Yi,{fw:600,size:`sm`,mb:`xs`,children:`Conversations`}),e.map(e=>(0,M.jsx)(Ua,{active:e.roomPath===t,label:SC(e),description:e.status===`connected`?void 0:`offline`,rightSection:(0,M.jsxs)(mi,{gap:4,wrap:`nowrap`,children:[e.pendingJoinRequest!==void 0&&(0,M.jsx)(ba,{color:`blue`,size:`sm`,children:`request`}),e.unread>0&&(0,M.jsx)(ba,{size:`sm`,"aria-label":`${String(e.unread)} unread`,children:e.unread})]}),onClick:()=>{n(e.roomPath)}},e.roomPath))]})}function wC({placeholder:e,ariaLabel:t,submitLabel:n,onSubmit:r,onCancel:i,size:a,autoFocus:o}){let[s,c]=(0,O.useState)(``),[l,u]=(0,O.useState)(void 0);function d(){let e=s.trim();e!==``&&(u(void 0),Promise.resolve(r(e)).then(()=>{c(``)}).catch(e=>{u(e instanceof Error?e.message:String(e))}))}function f(e){e.key===`Enter`&&d(),e.key===`Escape`&&i?.()}return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(mi,{gap:`xs`,flex:1,children:[(0,M.jsx)(_o,{flex:1,...a===void 0?{}:{size:a},placeholder:e,"aria-label":t,autoComplete:`off`,autoFocus:o,value:s,onChange:e=>{c(e.currentTarget.value)},onKeyDown:f}),(0,M.jsx)(ka,{...a===void 0?{}:{size:a},onClick:d,children:n})]}),l!==void 0&&(0,M.jsx)(Yi,{size:`sm`,c:`red`,children:l})]})}var TC=`You`,EC=256,DC=new Intl.DateTimeFormat(void 0,{hour:`2-digit`,minute:`2-digit`});function OC({sentAt:e}){return(0,M.jsx)(Yi,{component:`time`,size:`xs`,c:`dimmed`,dateTime:new Date(e).toISOString(),children:DC.format(e)})}function kC({messages:e,outgoing:t,peerLabel:n,onRetry:r,onDiscard:i}){let a=(0,O.useRef)(null);return(0,O.useEffect)(()=>{let e=a.current;e!==null&&(e.scrollTop=e.scrollHeight)},[e,t]),(0,M.jsx)(Lr,{h:EC,viewportRef:a,children:(0,M.jsxs)(Za,{gap:4,children:[e.map((t,r)=>{let i=t.direction===`sent`,a=r===0||e[r-1]?.direction!==t.direction;return(0,M.jsxs)(Za,{gap:0,align:i?`flex-end`:`flex-start`,mt:a?`xs`:0,children:[a&&(0,M.jsx)(Yi,{size:`xs`,fw:600,c:`dimmed`,children:i?TC:n}),(0,M.jsx)(Yi,{size:`sm`,children:t.text}),(0,M.jsx)(OC,{sentAt:t.sentAt})]},Ey(t.messageId))}),t.map(e=>(0,M.jsxs)(Za,{gap:0,align:`flex-end`,mt:`xs`,children:[(0,M.jsx)(Yi,{size:`xs`,fw:600,c:`dimmed`,children:TC}),(0,M.jsx)(Yi,{size:`sm`,c:`dimmed`,children:e.text}),e.status===`sending`?(0,M.jsx)(Yi,{size:`xs`,c:`dimmed`,children:`Sending`}):(0,M.jsxs)(mi,{gap:`xs`,children:[(0,M.jsx)(Yi,{size:`xs`,c:`red`,children:`Not sent: ${e.error}`}),(0,M.jsx)(ka,{size:`compact-xs`,variant:`light`,onClick:()=>{r(e.localId)},children:`Retry`}),(0,M.jsx)(ka,{size:`compact-xs`,variant:`subtle`,color:`gray`,onClick:()=>{i(e.localId)},children:`Dismiss`})]})]},e.localId))]})})}function AC(e){if(e.plaintext!==void 0)return new TextDecoder().decode(e.plaintext)}function jC({notices:e}){if(e.length===0)return null;let t=e.map((e,t)=>{let n=AC(e);return(0,M.jsx)(P,{children:n===void 0?(0,M.jsx)(Yi,{size:`sm`,c:`dimmed`,fs:`italic`,children:`encrypted notice -- no key held for its epoch`}):(0,M.jsx)(Yi,{size:`sm`,children:n})},t)});return(0,M.jsxs)(Za,{gap:4,children:[t,(0,M.jsxs)(ba,{variant:`light`,color:`gray`,size:`sm`,w:`fit-content`,children:[e.length,` notice`,e.length===1?``:`s`]})]})}var MC=864e5;function NC({view:e,onSend:t,onPostNotice:n,onRetry:r,onDiscard:i}){return(0,M.jsxs)(Za,{gap:`xs`,children:[(0,M.jsxs)(mi,{justify:`space-between`,children:[(0,M.jsx)(Yi,{fw:600,children:e.participants.join(`, `)}),(0,M.jsx)(Yi,{size:`sm`,c:e.status===`connected`?`green`:`dimmed`,children:e.status})]}),e.pendingJoinRequest&&(0,M.jsx)(Wi,{color:`blue`,title:`Message request`,children:(0,M.jsxs)(mi,{justify:`space-between`,children:[(0,M.jsxs)(Yi,{size:`sm`,children:[e.pendingJoinRequest.requesterHex,` wants to message you`]}),(0,M.jsxs)(mi,{children:[(0,M.jsx)(ka,{size:`xs`,onClick:()=>{e.pendingJoinRequest?.decide({kind:`accept`,capability:`room:member`,expires:Date.now()+MC})},children:`Allow`}),(0,M.jsx)(ka,{size:`xs`,color:`red`,variant:`light`,onClick:()=>{e.pendingJoinRequest?.decide({kind:`reject`})},children:`Deny`})]})]})}),(0,M.jsx)(kC,{messages:e.messages,outgoing:e.outgoing,peerLabel:SC(e),onRetry:r,onDiscard:i}),(0,M.jsx)(mi,{children:(0,M.jsx)(wC,{ariaLabel:`Message`,placeholder:`Message`,submitLabel:`Send`,onSubmit:t})}),(0,M.jsx)(Ba,{label:`Durable notices (encrypted, replicated)`,labelPosition:`center`}),(0,M.jsx)(jC,{notices:e.notices}),(0,M.jsx)(mi,{children:(0,M.jsx)(wC,{ariaLabel:`Post a durable notice`,placeholder:`Post a durable notice`,submitLabel:`Post notice`,onSubmit:n})})]})}var PC=`room:member`;async function FC(e,t){let n=await RS(e,{identity:t.identity,clock:t.clock,revocation:t.revocation,expectedBearer:t.expectedBearer});if(!n.ok)return n;if(n.claims.scope.kind!==`room`)return{ok:!1,reason:`wrong_scope_kind`};if(n.claims.scope.path!==t.roomPath)return{ok:!1,reason:`wrong_scope_path`};let r=Tb(t.roomPath),i=Dy(n.rootIssuer);if(r.kind===`owner-named`){if(i!==r.owner)return{ok:!1,reason:`wrong_chain_root`}}else if(t.dmRootPolicy===`either-participant`){if(i!==r.participants[0]&&i!==r.participants[1])return{ok:!1,reason:`wrong_chain_root`}}else if(i!==Dy(t.identity.deviceId))return{ok:!1,reason:`wrong_chain_root`};return{ok:!0,claims:n.claims,rootIssuerKey:n.rootIssuerKey}}var IC=16;function LC(){let e=new Uint8Array(IC);return crypto.getRandomValues(e),e}function RC(e,t){return{verb:e,params:{verb:`capability.request`,capability:e,...t===void 0?{}:{"valid-until":t}}}}async function zC(e,t,n,r,i,a){let o=await e.sendManageRequest(RC(t,a),n,r,void 0,i);if(o.result!==`ok`)throw Error(`capability request for "${t}" was refused (${o.code})`);let s=pv.safeParse(o);if(!s.success)throw Error(`capability request for "${t}" response was malformed`);return s.data}function BC(e){return async function(t){let n=fv.safeParse(t.command.params);if(!n.success||n.data.capability!==e.capability){await t.respond({result:`error`,code:`malformed`});return}let r=n.data[`valid-until`];if(r!==void 0&&r<=e.clock.now()){await t.respond({result:`error`,code:`expired`});return}let i=!1,a=setTimeout(()=>{i||(i=!0,t.respond({result:`error`,code:`timeout`,message:`no decision within the capability-request timeout`}).catch(()=>void 0))},e.timeoutMs);a.unref(),e.onRequest({scope:t.scope,requesterDevice:e.bearerDevice,async decide(n){if(i)return;if(i=!0,clearTimeout(a),n.kind===`reject`){await t.respond({result:`error`,code:`denied`,...n.reason===void 0?{}:{message:n.reason}});return}let r=await US({identity:e.identity,clock:e.clock,tokenId:LC(),bearer:e.bearerDevice,capability:n.capability,scope:t.scope,expires:n.expires,...n.delegationsRemaining===void 0?{}:{delegationsRemaining:n.delegationsRemaining}});if(!r.ok){await t.respond({result:`error`,code:`mint_failed`});return}let o=r.token;await t.respond({result:`ok`,"granted-token":o,...n.extensions??{}})}})}}function VC(e){return async function(t){if(t.command.verb!==e.capability){await t.respond({result:`error`,code:`malformed`});return}let n=mv.safeParse(t.command.params);if(!n.success){await t.respond({result:`error`,code:`malformed`});return}let r=n.data[`granted-token`],i=await RS(r,{identity:e.identity,clock:e.clock,revocation:e.revocation,expectedBearer:e.identity.deviceId});if(!i.ok){await t.respond({result:`error`,code:i.reason});return}if(i.claims.capability!==e.capability){await t.respond({result:`error`,code:`capability_mismatch`});return}if(!Gy(i.claims.scope,t.scope)){await t.respond({result:`error`,code:`scope_mismatch`});return}await t.respond({result:`ok`}),e.onGrant({capability:e.capability,grantedToken:r,scope:t.scope,granterDevice:e.granterDevice})}}var HC=16;function UC(){let e=new Uint8Array(HC);return crypto.getRandomValues(e),e}var WC=3e5;function GC(e,t,n){return{verb:PC,params:{verb:`room.send`,"message-id":t,"sent-at":n,text:e}}}async function KC(e,t,n,r,i){let a=GC(n,UC(),Date.now());return e.sendManageRequest(a,{kind:`room`,path:t},i,r)}async function qC(e,t,n){let r=await zC(e,PC,{kind:`room`,path:t},n),i=jv.safeParse(r);if(!i.success)throw Error(`room.join response for ${t} was malformed`);return{token:i.data[`granted-token`],members:i.data.members.map(e=>e.device)}}function JC(e,t,n){async function r(e,r){let i=e.scope.path;if(i===void 0||e.token===void 0){await e.respond({result:`error`,code:`unauthorized`});return}if(!(await FC(e.token,{identity:t.identity,clock:t.clock,revocation:t.revocation,expectedBearer:t.peerDevice,roomPath:i})).ok){await e.respond({result:`error`,code:`unauthorized`});return}await e.respond({result:`ok`});let a=r[`message-id`],o=r[`sent-at`],s=r.text;a instanceof Uint8Array&&typeof o==`number`&&typeof s==`string`&&n.onMessage?.({roomPath:i,text:s,messageId:a,sentAt:o})}function i(e){return async n=>{if(n.kind===`reject`){let t={kind:`reject`,...n.reason===void 0?{}:{reason:n.reason}};await e.decide(t);return}let r=[...t.currentMembers?.()??[],t.peerDevice].map(e=>({device:e})),i={kind:`accept`,capability:n.capability,expires:n.expires,...n.delegationsRemaining===void 0?{}:{delegationsRemaining:n.delegationsRemaining},extensions:{members:r}};await e.decide(i)}}let a=BC({capability:PC,identity:t.identity,clock:t.clock,bearerDevice:t.peerDevice,timeoutMs:t.joinRequestTimeoutMs??WC,onRequest(e){let t=e.scope.path,r=n.onJoinRequest;if(t===void 0||r===void 0){e.decide({kind:`reject`,reason:`unsupported verb`});return}r({roomPath:t,requesterDevice:e.requesterDevice,decide:i(e)})}});async function o(e){if(e.scope.path===void 0){await e.respond({result:`error`,code:`missing_scope_path`});return}if(n.onJoinRequest===void 0){await e.respond({result:`error`,code:`unsupported_verb`});return}await a(e)}let s=VC({capability:PC,identity:t.identity,clock:t.clock,revocation:t.revocation,granterDevice:t.peerDevice,onGrant(e){let t=e.scope.path,r=n.onRoomInvite;t!==void 0&&r!==void 0&&r({roomPath:t,granterDevice:e.granterDevice,token:e.grantedToken})}});async function c(e){if(e.scope.path===void 0){await e.respond({result:`error`,code:`missing_scope_path`});return}if(n.onRoomInvite===void 0){await e.respond({result:`error`,code:`unsupported_verb`});return}await s(e)}(async()=>{for await(let t of e.incomingManageRequests){if(t.command.verb!==`room:member`)continue;let e=t.command.params;typeof e==`object`&&`verb`in e&&(e.verb===`room.send`?await r(t,e):e.verb===`capability.request`?await o(t):e.verb===`capability.grant`?await c(t):e.verb===`room.rekey`&&n.onRekey!==void 0&&await n.onRekey(t))}})()}function YC(){let e=new Map;return{get:async t=>Promise.resolve(e.get(t)),set:async(t,n)=>Promise.resolve(e.set(t,n)).then(()=>void 0),delete:async t=>Promise.resolve(e.delete(t)).then(()=>void 0),keys:async t=>Promise.resolve([...e.keys()].filter(e=>e.startsWith(t)))}}var XC=32,ZC=256,QC=12,$C=4,ew=8,tw=new TextEncoder().encode(`wire-mesh/room-rekey/v1\0`);function nw(){return crypto.getRandomValues(new Uint8Array(XC))}function rw(e){let t=new TextEncoder().encode(e.room),n=new Uint8Array($C);new DataView(n.buffer).setUint32(0,t.length,!1);let r=new Uint8Array(ew);new DataView(r.buffer).setBigUint64(0,BigInt(e.keyEpoch),!1);let i=new Uint8Array(tw.length+n.length+t.length+r.length),a=0;return i.set(tw,a),a+=tw.length,i.set(n,a),a+=n.length,i.set(t,a),a+=t.length,i.set(r,a),i}async function iw(e,t){let n=await crypto.subtle.importKey(`raw`,Uint8Array.from(e),`HKDF`,!1,[`deriveKey`]);return crypto.subtle.deriveKey({name:`HKDF`,hash:`SHA-256`,salt:Uint8Array.from(new Uint8Array),info:Uint8Array.from(rw(t))},n,{name:`AES-GCM`,length:ZC},!1,[`encrypt`,`decrypt`])}async function aw(e,t){let n=crypto.getRandomValues(new Uint8Array(QC)),r=new Uint8Array(await crypto.subtle.encrypt({name:`AES-GCM`,iv:n},e,Uint8Array.from(t))),i=new Uint8Array(n.length+r.length);return i.set(n,0),i.set(r,n.length),i}async function ow(e,t){if(t.length<QC)throw Error(`ciphertext shorter than the AES-GCM IV it must carry`);let n=t.slice(0,QC),r=t.slice(QC);return new Uint8Array(await crypto.subtle.decrypt({name:`AES-GCM`,iv:n},e,r))}async function sw(e,t){return aw(e,t)}async function cw(e,t){return ow(e,t)}async function lw(e){return crypto.subtle.importKey(`raw`,Uint8Array.from(e),`AES-GCM`,!1,[`encrypt`,`decrypt`])}async function uw(e,t){return aw(await lw(e),t)}async function dw(e,t){return ow(await lw(e),t)}var fw=`+aes256gcm`;function pw(e){return hw(e)?e:`${e}${fw}`}function mw(e){return hw(e)?e.slice(0,e.length-10):e}function hw(e){return e.endsWith(fw)}function gw(e,t){return{verb:PC,params:{verb:`room.rekey`,"key-epoch":e,"wrapped-key":t}}}async function _w(e,t,n,r,i,a){return e.sendManageRequest(gw(n,r),{kind:`room`,path:t},i,a)}function vw(e){return async function(t){if(t.command.verb!==`room:member`){await t.respond({result:`error`,code:`malformed`});return}let n=kv.safeParse(t.command.params);if(!n.success){await t.respond({result:`error`,code:`malformed`});return}if(t.scope.kind!==`room`||t.scope.path===void 0){await t.respond({result:`error`,code:`scope_mismatch`});return}let r=t.scope.path,i=await FC(e.ownRoomMemberToken,{identity:e.identity,clock:e.clock,revocation:e.revocation,expectedBearer:e.identity.deviceId,roomPath:r,dmRootPolicy:`either-participant`});if(!i.ok){await t.respond({result:`error`,code:i.reason});return}let a=e.identity.deriveSharedSecret;if(a===void 0){await t.respond({result:`error`,code:`ecdh_unsupported`});return}let o=n.data[`key-epoch`],s=Array.isArray(n.data[`wrapped-key`])?n.data[`wrapped-key`]:[n.data[`wrapped-key`]],c=o-s.length+1,l;try{let e=await a(i.rootIssuerKey);l=await Promise.all(s.map(async(t,n)=>cw(await iw(e,{room:r,keyEpoch:c+n}),t)))}catch{await t.respond({result:`error`,code:`unwrap_failed`});return}await t.respond({result:`ok`}),e.onRekey({room:r,keyEpoch:o,contentKeys:l})}}function yw(e){return`data/${Dy(e)}/head`}function bw(e,t){return`data/${Dy(e)}/entry/${String(t)}`}async function xw(e,t){let n=await e.get(yw(t));return n===void 0?0:Number(new TextDecoder().decode(n))}async function Sw(e,t,n){await e.set(yw(t),new TextEncoder().encode(String(n)))}async function Cw(e,t){return xw(e,t)}async function ww(e,t){let n=await xw(e.storage,e.identity.deviceId)+1;return await e.storage.set(bw(e.identity.deviceId,n),t),await Sw(e.storage,e.identity.deviceId,n),{seq:n,haveFrame:{type:`data-have`,peer:e.identity.deviceId,"head-seq":n}}}async function Tw(e,t,n){let r=await xw(e,t.peer);if(r<=t[`from-seq`])return null;let i=Math.min(r,t[`from-seq`]+n),a=[];for(let n=t[`from-seq`]+1;n<=i;n+=1){let r=await e.get(bw(t.peer,n));if(r===void 0)break;a.push(r)}return a.length===0?null:{type:`data-entries`,peer:t.peer,"from-seq":t[`from-seq`],entries:a}}async function Ew(e,t){let n=await xw(e,t.peer);if(t[`from-seq`]!==n)return{ok:!1,reason:`gap`};let r=t[`from-seq`];for(let n of t.entries)r+=1,await e.set(bw(t.peer,r),n);return await Sw(e,t.peer,r),{ok:!0}}async function Dw(e,t,n){let r=await xw(e,t),i=[];for(let a=n+1;a<=r;a+=1){let n=await e.get(bw(t,a));if(n===void 0)break;i.push(n)}return i}function Ow(e){return Uint8Array.from(e)}function kw(e){return Ow(hc(e,Qs))}function Aw(e){return kw({1:e.identityKey.alg,4:e.deviceId})}function jw(e,t){return hc([`Signature1`,e,new Uint8Array,t],Qs)}function Mw(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1)if(e[n]!==t[n])return!1;return!0}async function Nw(e,t){let[n,,r,i]=e;if(r===null)return{ok:!1,reason:`malformed`};let a;try{a=rl(r,il)}catch{return{ok:!1,reason:`malformed`}}let o=Nv.safeParse(a);if(!o.success)return{ok:!1,reason:`malformed`};let s=o.data;if(t.expectedRoom!==void 0&&s.room!==t.expectedRoom)return{ok:!1,reason:`wrong_room`};if(!await t.identity.verify(s[`poster-key`],jw(n,r),i))return{ok:!1,reason:`bad_signature`};if(!Mw(await t.identity.deriveDeviceId(s[`poster-key`][`public-key`]),s.poster))return{ok:!1,reason:`wrong_poster`};let c=s[`valid-until`];if(c!==void 0&&c<=t.clock.now())return{ok:!1,reason:`content_expired`};let l=s[`key-epoch`];if(hw(s[`content-type`])!==(l!==void 0))return{ok:!1,reason:`key_epoch_mismatch`};let u=await FC(s.token,{identity:t.identity,clock:t.clock,revocation:t.revocation,expectedBearer:s.poster,roomPath:s.room});return u.ok?{ok:!0,claims:s}:{ok:!1,reason:u.reason}}async function Pw(e){let t=kw({room:e.room,poster:e.identity.deviceId,"poster-key":e.identity.identityKey,token:e.token,"notice-id":e.noticeId,"posted-at":e.clock.now(),"content-type":e.contentType,content:e.content,...e.refs===void 0?{}:{refs:[...e.refs]},...e.validUntil===void 0?{}:{"valid-until":e.validUntil},...e.keyEpoch===void 0?{}:{"key-epoch":e.keyEpoch}}),n=Aw(e.identity);return[n,{},t,await e.identity.sign(jw(n,t))]}var Fw=16;function Iw(e){return new Uint8Array(hc(e,Qs))}function Lw(e){let{identity:t,storage:n,clock:r,revocation:i,roomKeys:a}=e;async function o(e){let i=await a.currentEpoch(e.room);if(i===void 0)throw Error(`no content key held for room ${e.room}: room.rekey this room before posting encrypted notices`);let o=await a.get(e.room,i);if(o===void 0)throw Error(`content key store is inconsistent: epoch ${String(i)} is current for room ${e.room} but holds no key`);let s=e.noticeId??crypto.getRandomValues(new Uint8Array(Fw)),c=await uw(o,e.plaintext),l=await Pw({identity:t,clock:r,room:e.room,token:e.token,noticeId:s,contentType:pw(e.contentType),content:c,keyEpoch:i}),{haveFrame:u}=await ww({identity:t,storage:n},Iw(l));return{dataHave:u,notice:l,keyEpoch:i}}async function s(e,t){let r=await Cw(n,e);if(!(await Ew(n,{type:`data-entries`,peer:e,"from-seq":r,entries:[t]})).ok)throw Error(`gap rejecting entry for peer log (head ${String(r)})`)}async function c(e,t){let r=await Dw(n,e,0),i=[];for(let e of r)i.push(await l(e,t));return i}async function l(e,n){let o=u(e);if(o===void 0)return{verified:!1,reason:`malformed`};let s=await Nw(o,{identity:t,clock:r,revocation:i,expectedRoom:n});if(!s.ok)return{verified:!1,reason:s.reason};let c=s.claims;if(!hw(c[`content-type`]))return{verified:!0,contentType:c[`content-type`],plaintext:c.content,claims:c};let l=c[`key-epoch`];if(l===void 0)return{verified:!1,reason:`key_epoch_mismatch`};let d=await a.get(c.room,l),f={verified:!0,contentType:mw(c[`content-type`]),claims:c};if(d===void 0)return f;try{let e=await dw(d,c.content);return{...f,plaintext:e}}catch{return f}}function u(e){try{let t=rl(e,il),n=Mv.safeParse(t);return n.success?n.data:void 0}catch{return}}return{postEncryptedNotice:o,ingestPeerEntry:s,readOwnNotices:async e=>c(t.deviceId,e),readPeerNotices:async(e,t)=>c(e,t)}}var Rw=32;function zw(e){let{session:t,storage:n,identity:r,clock:i,revocation:a,roomKeys:o,onChange:s}=e,c=Lw({identity:r,storage:n,clock:i,revocation:a,roomKeys:o}),l=new Map;async function u(e){let r=await Cw(n,e);await t.sendDataFrame({type:`data-request`,peer:e,"from-seq":r})}function d(e){if(e.type===`data-have`){l.set(Dy(e.peer),e.peer),u(e.peer).catch(()=>void 0);return}if(e.type===`data-entries`){(async()=>{(await Ew(n,e)).ok&&(e.entries.length>=Rw&&await u(e.peer).catch(()=>void 0),s())})();return}e.type===`data-request`&&(async()=>{let r=await Tw(n,e,Rw);r!==null&&await t.sendDataFrame(r)})().catch(()=>void 0)}return{handleFrame:d,async post(e){let{dataHave:n}=await c.postEncryptedNotice(e);await t.sendDataFrame(n),s()},async readRoom(e){let t=await c.readOwnNotices(e),n=await Promise.all([...l.values()].map(async t=>c.readPeerNotices(t,e)));return[...t,...n.flat()]},roomKeys:o}}async function Bw(e){let{session:t,identity:n,clock:r,revocation:i,ownRoomMemberToken:a,roomPath:o,roomKeys:s}=e;if(await s.currentEpoch(o)!==void 0)return;let c=o.split(`+`)[0]??``;if(c===``||Dy(n.deviceId)!==c)return;let l=await FC(a,{identity:n,clock:r,revocation:i,expectedBearer:n.deviceId,roomPath:o,dmRootPolicy:`either-participant`});if(!l.ok)throw Error(`own room token failed verification: ${l.reason}`);let u=n.deriveSharedSecret;if(u===void 0)throw Error(`this identity cannot derive ECDH shared secrets`);let d=nw(),f=await sw(await iw(await u(l.rootIssuerKey),{room:o,keyEpoch:1}),d);s.set(o,1,d),await _w(t,o,1,f)}var Vw=[`core/management`,`core/room`],Hw=16;function Uw(){let e=new Uint8Array(Hw);return crypto.getRandomValues(e),e}function Ww(e){if(e?.session===void 0||e.status!==`connected`)throw Error(`conversation is not connected`);return e.session}function Gw(e,t,n){let[r,i]=(0,O.useReducer)(yC,new Map),a=Dy(e.deviceId);(0,O.useEffect)(()=>{let e=new AbortController;return(async()=>{for(let t of await n.roomPaths()){let r=await n.list(t);if(e.signal.aborted)return;i({type:`restored`,roomPath:t,participants:bC(t,a),messages:r})}})(),()=>{e.abort()}},[n,a]);let o=(0,O.useRef)(new Map),s=(0,O.useRef)(new Map);function c(n,r){let a=new Map,o={get:async(e,t)=>Promise.resolve(a.get(e)?.get(t)),set:(e,t,n)=>{let r=a.get(e)??new Map;r.set(t,n),a.set(e,r)},currentEpoch:async e=>Promise.resolve([...a.get(e)?.keys()??[]].sort((e,t)=>t-e)[0])},s={},c=()=>{let e=s.wiring;e!==void 0&&e.readRoom(r).then(e=>{i({type:`notices`,roomPath:r,notices:[...e]})})},l=zw({session:n,storage:YC(),identity:e,clock:t,revocation:iC,roomKeys:o,onChange:()=>{c()}});return s.wiring=l,{wiring:l,roomKeys:o,refresh:c}}let l=(0,O.useCallback)(async(l,u)=>{let d={},f=await vb(l,e,Vw,{clock:t,onFrame:(e,t)=>{d.current?.(t)}}),p=u??await f.peerDeviceId,m=Dy(p),h=wb(a,m);if(r.get(h)?.status===`connected`){await f.close();return}let g=c(f,h);o.current.set(h,g),s.current.delete(h),d.current=e=>{g.wiring.handleFrame(e)},i({type:`opened`,roomPath:h,participants:[m],session:f}),i({type:`restored`,roomPath:h,participants:[m],messages:await n.list(h)}),JC(f,{identity:e,clock:t,revocation:iC,peerDevice:p,currentMembers:()=>[e.deviceId,p]},{onMessage:e=>{let t={direction:`received`,text:e.text,messageId:e.messageId,sentAt:e.sentAt};n.append(h,t),i({type:`message`,roomPath:h,message:t})},onJoinRequest:e=>{i({type:`join-request`,roomPath:h,request:{requesterHex:Dy(e.requesterDevice),async decide(t){i({type:`join-request-settled`,roomPath:h}),await e.decide(t)}}})},onRekey:async n=>{let r=s.current.get(h);if(r===void 0){await n.respond({result:`error`,code:`no_token`});return}await vw({identity:e,clock:t,revocation:iC,ownRoomMemberToken:r,onRekey:e=>{e.contentKeys.forEach((t,n)=>{g.roomKeys.set(h,e.keyEpoch-e.contentKeys.length+1+n,t)}),g.refresh()}})(n)}}),(async()=>{for await(let e of f.events)e.state.status===`closed`&&i({type:`closed`,roomPath:h})})()},[e,t,a,r,n]),u=(0,O.useCallback)(async(a,c)=>{let l=r.get(a),u=Ww(l),d=l?.token;d===void 0&&(d=(await qC(u,a)).token,s.current.set(a,d),i({type:`token`,roomPath:a,token:d}),Bw({session:u,identity:e,clock:t,revocation:iC,ownRoomMemberToken:d,roomPath:a,roomKeys:o.current.get(a)?.roomKeys??{get:async()=>Promise.resolve(void 0),set:()=>void 0,currentEpoch:async()=>Promise.resolve(void 0)}}).catch(()=>void 0));let f=await KC(u,a,c,d);if(f.result!==`ok`)throw Error(`send failed: ${f.code}`);let p={direction:`sent`,text:c,messageId:Uw(),sentAt:t.now()};return await n.append(a,p),p},[r,t,n,e]),d=(0,O.useCallback)(async(e,t,n)=>{i({type:`outgoing`,roomPath:e,entry:{localId:t,text:n,status:`sending`}});try{let r=await u(e,n);i({type:`message`,roomPath:e,message:r}),i({type:`outgoing-removed`,roomPath:e,localId:t})}catch(r){i({type:`outgoing`,roomPath:e,entry:{localId:t,text:n,status:`failed`,error:r instanceof Error?r.message:String(r)}})}},[u]),f=(0,O.useCallback)(async(e,t)=>d(e,crypto.randomUUID(),t),[d]),p=(0,O.useCallback)(async(e,t)=>{let n=r.get(e)?.outgoing.find(e=>e.localId===t);n!==void 0&&await d(e,t,n.text)},[r,d]),m=(0,O.useCallback)((e,t)=>{i({type:`outgoing-removed`,roomPath:e,localId:t})},[]),h=(0,O.useCallback)(async(n,a)=>{let c=r.get(n),l=Ww(c),u=o.current.get(n);if(u===void 0)throw Error(`conversation ${n} has no notice board`);let d=c?.token??s.current.get(n);d===void 0&&(d=(await qC(l,n)).token,s.current.set(n,d),i({type:`token`,roomPath:n,token:d})),await Bw({session:l,identity:e,clock:t,revocation:iC,ownRoomMemberToken:d,roomPath:n,roomKeys:u.roomKeys}),await u.wiring.post({room:n,token:d,contentType:`text/plain`,plaintext:new TextEncoder().encode(a)}),u.refresh()},[r,e,t]),g=(0,O.useCallback)(e=>{i({type:`read`,roomPath:e})},[]);return{conversations:[...r.values()],attach:l,send:f,retry:p,discard:m,postNotice:h,markRead:g}}var Kw=8787,qw=/^(localhost|127\.\d+\.\d+\.\d+)(:\d+)?$/;function Jw(e){return qw.test(e)}async function Yw(e=Kw){try{return await fetch(`http://127.0.0.1:${String(e)}/`,{mode:`no-cors`}),`ws://127.0.0.1:${String(e)}`}catch{return}}async function Xw(e=typeof location>`u`?``:location.host){return Jw(e)?Promise.resolve(void 0):Yw()}var Zw=`q7ltm10`,Qw=`ws://localhost:8787`,$w=[`core/management`,`core/exec`,`core/data`],eT=[`core/management`,`core/data`],tT=5,nT=1e3,rT=3e4,iT=2,aT={maxAttempts:tT,delayMs:e=>Math.min(nT*iT**(e-1),rT)};function oT(e){return e.startsWith(`ws://`)||e.startsWith(`wss://`)?e:`ws://${e}`}function sT({identity:e,clock:t,messageStore:n,discoverLocalNode:r=Xw,defaultAddress:i=Qw}){let[a,o]=(0,O.useState)(i),[s,c]=(0,O.useState)(eT),[l,u]=(0,O.useState)([]),[d,f]=(0,O.useState)([]),p=Gw(e,t,n),[m,h]=(0,O.useState)(),g=p.conversations.find(e=>e.roomPath===m)??p.conversations[0],{markRead:_}=p,v=g?.roomPath,y=g?.unread??0;(0,O.useEffect)(()=>{v!==void 0&&y>0&&_(v)},[v,y,_]);let b=(0,O.useRef)(p.attach);(0,O.useEffect)(()=>{b.current=p.attach},[p.attach]);let x=(0,O.useRef)(l);(0,O.useEffect)(()=>{x.current=l},[l]);let S=(0,O.useRef)(s);(0,O.useEffect)(()=>{S.current=s},[s]);function C(n,r){let i=sC(r,{identity:e,clock:t,onIncomingConnection:e=>{b.current(e)}});u(e=>[...e,{address:n,session:r,negotiator:i}])}async function w(e){return new Promise(t=>{f(n=>[...n,{key:uC(e.device),device:e.device,addresses:e.addresses,resolve:t}])})}function T(e,t){f(n=>(n.find(t=>t.key===e)?.resolve(t),n.filter(t=>t.key!==e)))}function ee(){let n={current:null},r=_b(Ab(),e,t,aT,[],e=>{n.current?.considerAdvert(e)});return n.current=bb({selfDeviceId:e.deviceId,shouldExpand:w,dial:E,onExpanded:(e,t,n)=>{C(t,n)}}),r}async function E(e){let t=ee();return t.connect(oT(e),S.current).then(()=>t)}function D(e){if(x.current.some(t=>t.address===e))return;let t=ee();C(e,t),t.connect(e,s).catch(()=>{})}let te=(0,O.useRef)(D);(0,O.useEffect)(()=>{te.current=D});let k=(0,O.useRef)(r);(0,O.useEffect)(()=>{k.current=r},[r]);let ne=(0,O.useRef)(!1);(0,O.useEffect)(()=>{ne.current||(ne.current=!0,k.current().then(e=>{e!==void 0&&te.current(e)}))},[]);function re(e){e.preventDefault(),D(a)}function ie(e){e.session.close(),u(t=>t.filter(t=>t.session!==e.session))}function ae(t,n){t.initiate(n).then(async t=>{await p.attach(t,n),h(wb(Dy(e.deviceId),Dy(n)))}).catch(()=>{})}return(0,M.jsxs)(Za,{className:Zw,p:`md`,gap:`lg`,children:[(0,M.jsx)(Co,{order:1,children:`wire-mesh console`}),(0,M.jsxs)(`form`,{onSubmit:re,children:[(0,M.jsxs)(mi,{align:`flex-end`,wrap:`wrap`,children:[(0,M.jsx)(_o,{label:`Node`,value:a,onChange:e=>{o(e.currentTarget.value)},required:!0,style:{flex:1,minWidth:`16rem`}}),(0,M.jsx)(ka,{type:`submit`,children:`Connect`})]}),(0,M.jsx)(_a.Group,{label:`Domains offered`,value:s,onChange:c,children:(0,M.jsx)(mi,{mt:`xs`,children:$w.map(e=>(0,M.jsx)(_a,{value:e,label:e},e))})})]}),(0,M.jsx)(hC,{peers:d,onConnect:e=>{T(e,!0)},onDismiss:e=>{T(e,!1)}}),l.map(e=>(0,M.jsx)(mC,{address:e.address,session:e.session,onClose:()=>{ie(e)},onMessagePeer:t=>{ae(e.negotiator,t)}},e.address)),(0,M.jsx)(CC,{conversations:p.conversations,selected:g?.roomPath,onSelect:h}),g!==void 0&&(0,M.jsx)(NC,{view:g,onSend:async e=>p.send(g.roomPath,e),onPostNotice:async e=>p.postNotice(g.roomPath,e),onRetry:e=>{p.retry(g.roomPath,e)},onDiscard:e=>{p.discard(g.roomPath,e)}},g.roomPath)]})}var cT=`modulepreload`,lT=function(e){return`/`+e},uT={},dT=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=lT(t,n),t=s(t),t in uT)return;uT[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:cT,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},fT=`false`,pT=`false`,mT=fT===`true`,hT=pT===`true`;function gT(e={}){let{immediate:t=!1,onNeedReload:n,onNeedRefresh:r,onOfflineReady:i,onRegistered:a,onRegisteredSW:o,onRegisterError:s}=e,c,l,u,d=async(e=!0)=>{await l,mT||u?.()};async function f(){if(`serviceWorker`in navigator){if(c=await dT(async()=>{let{Workbox:e}=await import(`./workbox-window.prod.es5-Bd17z0YL.js`);return{Workbox:e}},[]).then(({Workbox:e})=>new e(`/sw.js`,{scope:`/`,type:`classic`})).catch(e=>{s?.(e)}),!c)return;if(u=()=>{c?.messageSkipWaiting()},!hT){if(mT)c.addEventListener(`activated`,e=>{(e.isUpdate||e.isExternal)&&(n?n():window.location.reload())}),c.addEventListener(`installed`,e=>{e.isUpdate||i?.()});else{let e=!1,t=()=>{e=!0,c?.addEventListener(`controlling`,e=>{e.isUpdate&&(n?n():window.location.reload())}),r?.()};c.addEventListener(`installed`,n=>{n.isUpdate===void 0?n.isExternal===void 0?!e&&i?.():n.isExternal?t():!e&&i?.():n.isUpdate||i?.()}),c.addEventListener(`waiting`,t)}}c.register({immediate:t}).then(e=>{o?o(`/sw.js`,e):a?.(e)}).catch(e=>{s?.(e)})}}return l=f(),d}function _T(e={}){let{immediate:t=!0,onNeedReload:n,onNeedRefresh:r,onOfflineReady:i,onRegistered:a,onRegisteredSW:o,onRegisterError:s}=e,[c,l]=(0,O.useState)(!1),[u,d]=(0,O.useState)(!1),[f]=(0,O.useState)(()=>gT({immediate:t,onNeedReload:n,onOfflineReady(){d(!0),i?.()},onNeedRefresh(){l(!0),r?.()},onRegistered:a,onRegisteredSW:o,onRegisterError:s}));return{needRefresh:[c,l],offlineReady:[u,d],updateServiceWorker:f}}function vT(){let{offlineReady:[e,t],needRefresh:[n,r],updateServiceWorker:i}=_T();function a(){t(!1),r(!1)}return!e&&!n?null:(0,M.jsx)(qa,{onClose:a,closeButtonProps:{"aria-label":`Dismiss`},title:n?`Update available`:`Ready to work offline`,pos:`fixed`,bottom:`1rem`,right:`1rem`,style:{zIndex:1e3},children:(0,M.jsx)(mi,{gap:`xs`,children:n?(0,M.jsx)(ka,{size:`xs`,onClick:()=>{i(!0)},children:`Reload`}):void 0})})}var yT=`ws://localhost:8787`;function bT(e){return`${e.protocol===`https:`?`wss:`:`ws:`}//${e.host}`}function xT(e,t){return e?yT:bT(t)}var ST=await vl(await No()),CT={now:()=>Date.now()},wT=Py(await No()),TT=xT(!1,window.location),ET=document.getElementById(`root`);if(ET===null)throw Error(`missing #root element`);(0,wo.createRoot)(ET).render((0,M.jsx)(O.StrictMode,{children:(0,M.jsxs)(Vt,{children:[(0,M.jsx)(sT,{identity:ST,clock:CT,messageStore:wT,defaultAddress:TT}),(0,M.jsx)(vT,{})]})}));
|
|
72
|
+
`,t:` `,r:`\r`,f:`\f`,v:`\v`},Ix=class{pattern;pos=0;constructor(e){this.pattern=e}get position(){return this.pos}atEnd(){return this.pos>=this.pattern.length}peek(e=0){return this.pattern[this.pos+e]}advance(){let e=this.pattern[this.pos];if(e===void 0)throw new Ex(this.pattern,this.pos,`unexpected end of pattern`);return this.pos+=1,e}parseAlternation(){let e=this.parseSequence(),t=[];for(;this.peek()===`|`;)this.advance(),t.push(this.parseSequence());return t.length===0?e:{kind:`alternation`,branches:[e,...t]}}parseSequence(){if(this.atEnd()||Px.has(this.peek()??``))return{kind:`concat`,operands:[]};let e=this.parseQuantified(),t=[];for(;!this.atEnd()&&!Px.has(this.peek()??``);)t.push(this.parseQuantified());return t.length===0?e:{kind:`concat`,operands:[e,...t]}}parseQuantified(){let e=this.pos,t=this.parseAtom();if(t.kind===`anchorStart`||t.kind===`anchorEnd`){if(this.peekIsQuantifierStart())throw new Ex(this.pattern,e,`an anchor ('${t.kind===`anchorStart`?`^`:`$`}') cannot be quantified`);return t}let n=this.tryParseQuantifier();if(n===void 0)return t;if(this.peekIsQuantifierStart())throw new Ex(this.pattern,this.pos,`a quantifier cannot itself be quantified -- this grammar has no lazy or possessive modifiers, since a pattern that only ever answers a yes/no match question has no notion for either to change`);switch(n.kind){case`star`:return{kind:`star`,operand:t};case`plus`:return{kind:`plus`,operand:t};case`optional`:return{kind:`optional`,operand:t};case`repeat`:return{kind:`repeat`,operand:t,min:n.min,max:n.max};default:throw Error(`unreachable quantifier kind`)}}peekIsQuantifierStart(){let e=this.peek();if(e===`*`||e===`+`||e===`?`)return!0;if(e===`{`){let e=this.pos,t=this.tryParseBound();return this.pos=e,t!==void 0}return!1}tryParseQuantifier(){let e=this.peek();if(e===`*`)return this.advance(),{kind:`star`};if(e===`+`)return this.advance(),{kind:`plus`};if(e===`?`)return this.advance(),{kind:`optional`};if(e===`{`){let e=this.tryParseBound();return e===void 0?void 0:{kind:`repeat`,min:e.min,max:e.max}}}tryParseBound(){let e=this.pos;this.pos+=1;let t=this.readDigits();if(t===``){this.pos=e;return}let n,r=!1;if(this.peek()===`,`&&(r=!0,this.pos+=1,n=this.readDigits()),this.peek()!==`}`){this.pos=e;return}this.pos+=1;let i=Number.parseInt(t,10),a=r?n===``?void 0:Number.parseInt(n??``,10):i;if(a!==void 0&&a<i)throw new Ex(this.pattern,e,`quantifier range is backwards: {${t}${r?`,`+(n??``):``}} would require between ${String(i)} and ${String(a)} repetitions`);return{min:i,max:a}}readDigits(){let e=``;for(;;){let t=this.peek();if(t===void 0||t<`0`||t>`9`)break;e+=t,this.pos+=1}return e}parseAtom(){let e=this.peek();if(e===void 0)throw new Ex(this.pattern,this.pos,`unexpected end of pattern`);if(e===`^`)return this.advance(),{kind:`anchorStart`};if(e===`$`)return this.advance(),{kind:`anchorEnd`};if(e===`.`)return this.advance(),{kind:`anyChar`};if(e===`(`)return this.parseGroup();if(e===`[`)return this.parseCharClass();if(e===`\\`)return this.parseEscapedAtom();if(e===`*`||e===`+`||e===`?`)throw new Ex(this.pattern,this.pos,`quantifier '${e}' with nothing to repeat`);return this.advance(),{kind:`literal`,codeUnit:e.charCodeAt(0)}}parseGroup(){let e=this.pos;if(this.advance(),this.peek()===`?`&&this.peek(1)===`:`)this.advance(),this.advance();else throw new Ex(this.pattern,e,`capturing groups are not supported in this grammar -- there is nothing to capture, since a pattern only ever answers whether it matches. Use '(?:...)' for grouping.`);let t=this.parseAlternation();if(this.peek()!==`)`)throw new Ex(this.pattern,this.pos,`expected ')' to close '(?:'`);return this.advance(),t}parseEscapedAtom(){let e=this.pos;if(this.advance(),this.atEnd())throw new Ex(this.pattern,e,`trailing backslash with nothing to escape`);let t=this.advance();if(t===`d`||t===`D`||t===`w`||t===`W`||t===`s`||t===`S`)return Nx(t);let n=Fx[t];if(n!==void 0)return{kind:`literal`,codeUnit:n.charCodeAt(0)};throw new Ex(this.pattern,e,`unknown escape sequence '\\${t}'`)}parseCharClass(){let e=this.pos;this.advance();let t=!1;this.peek()===`^`&&(this.advance(),t=!0);let n=[];for(;;){if(this.atEnd())throw new Ex(this.pattern,e,`unterminated character class -- missing closing ']'`);if(this.peek()===`]`){if(n.length===0)throw new Ex(this.pattern,this.pos,`a character class must contain at least one item -- ']' immediately, or immediately after '[^', is not the empty class here (escape it as '\\]' to match a literal ']')`);this.advance();break}n.push(...this.parseClassItem())}return{kind:`charClass`,negated:t,ranges:n}}parseClassItem(){let e=this.peek();if(e===`\\`){let e=this.pos;if(this.advance(),this.atEnd())throw new Ex(this.pattern,e,`trailing backslash with nothing to escape`);let t=this.advance();if(t===`d`||t===`w`||t===`s`)return Nx(t).ranges;if(t===`D`||t===`W`||t===`S`)throw new Ex(this.pattern,e,`the negated shorthand class '\\${t}' cannot be embedded inside a character class, because its complement cannot be represented as a set of ranges to union with the class's other members -- use it as its own atom instead of embedding it here`);let n=Fx[t];if(n===void 0)throw new Ex(this.pattern,e,`unknown escape sequence '\\${t}'`);return this.parseOptionalRangeFrom(n.charCodeAt(0))}if(e===void 0)throw new Ex(this.pattern,this.pos,`unterminated character class -- missing closing ']'`);return this.advance(),this.parseOptionalRangeFrom(e.charCodeAt(0))}parseOptionalRangeFrom(e){if(this.peek()===`-`&&this.peek(1)!==void 0&&this.peek(1)!==`]`){let t=this.pos;this.advance();let n=this.parseClassRangeEndpoint();if(n<e)throw new Ex(this.pattern,t,`invalid range in character class: '${String.fromCharCode(e)}-${String.fromCharCode(n)}' is reversed`);return[{from:e,to:n}]}return[{from:e,to:e}]}parseClassRangeEndpoint(){let e=this.peek();if(e===`\\`){let e=this.pos;if(this.advance(),this.atEnd())throw new Ex(this.pattern,e,`trailing backslash with nothing to escape`);let t=this.advance();if(t===`d`||t===`D`||t===`w`||t===`W`||t===`s`||t===`S`)throw new Ex(this.pattern,e,`a shorthand class ('\\${t}') cannot be a range endpoint`);let n=Fx[t];if(n===void 0)throw new Ex(this.pattern,e,`unknown escape sequence '\\${t}'`);return n.charCodeAt(0)}if(e===void 0)throw new Ex(this.pattern,this.pos,`unterminated character class -- missing closing ']'`);return this.advance(),e.charCodeAt(0)}};function Lx(e){let t=new Ix(e),n=t.parseAlternation();if(!t.atEnd())throw new Ex(e,t.position,`unexpected character -- if this was meant literally, escape it with a backslash`);return n}var Rx=class{states=[];add(e){return this.states.push(e),this.states.length-1}patch(e,t){for(let n of e){let e=this.states[n.state];if(e!==void 0)switch(n.field){case`to`:(e.kind===`char`||e.kind===`anchorStart`||e.kind===`anchorEnd`)&&(e.to=t);break;case`to1`:e.kind===`split`&&(e.to1=t);break;case`to2`:e.kind===`split`&&(e.to2=t)}}}emptyFrag(){let e=this.add({kind:`split`,to1:-1,to2:-1});return{start:e,out:[{state:e,field:`to1`},{state:e,field:`to2`}]}}compileRepeat(e){let{operand:t,min:n,max:r}=e;if(r===void 0){if(n===0)return this.compileNode({kind:`star`,operand:t});let e=[];for(let r=0;r<n-1;r+=1)e.push(t);return e.push({kind:`plus`,operand:t}),this.compileNode({kind:`concat`,operands:e})}let i=[];for(let e=0;e<n;e+=1)i.push(t);for(let e=0;e<r-n;e+=1)i.push({kind:`optional`,operand:t});return i.length===0?this.emptyFrag():this.compileNode({kind:`concat`,operands:i})}compileNode(e){switch(e.kind){case`literal`:{let t=e.codeUnit,n=this.add({kind:`char`,test:e=>e===t,to:-1});return{start:n,out:[{state:n,field:`to`}]}}case`anyChar`:{let e=this.add({kind:`char`,test:()=>!0,to:-1});return{start:e,out:[{state:e,field:`to`}]}}case`charClass`:{let t=this.add({kind:`char`,test:t=>Tx(e,t),to:-1});return{start:t,out:[{state:t,field:`to`}]}}case`anchorStart`:{let e=this.add({kind:`anchorStart`,to:-1});return{start:e,out:[{state:e,field:`to`}]}}case`anchorEnd`:{let e=this.add({kind:`anchorEnd`,to:-1});return{start:e,out:[{state:e,field:`to`}]}}case`concat`:{if(e.operands.length===0)return this.emptyFrag();let[t,...n]=e.operands;if(t===void 0)throw Error(`unreachable: a non-empty operands array always has a first element`);let r=this.compileNode(t);for(let e of n){let t=this.compileNode(e);this.patch(r.out,t.start),r={start:r.start,out:t.out}}return r}case`alternation`:{let[t,...n]=e.branches;if(t===void 0)throw Error(`unreachable: AlternationNode always has at least two branches`);let r=this.compileNode(t);for(let e of n){let t=this.compileNode(e);r={start:this.add({kind:`split`,to1:r.start,to2:t.start}),out:[...r.out,...t.out]}}return r}case`star`:{let t=this.compileNode(e.operand),n=this.add({kind:`split`,to1:t.start,to2:-1});return this.patch(t.out,n),{start:n,out:[{state:n,field:`to2`}]}}case`plus`:{let t=this.compileNode(e.operand),n=this.add({kind:`split`,to1:t.start,to2:-1});return this.patch(t.out,n),{start:t.start,out:[{state:n,field:`to2`}]}}case`optional`:{let t=this.compileNode(e.operand),n=this.add({kind:`split`,to1:t.start,to2:-1});return{start:n,out:[...t.out,{state:n,field:`to2`}]}}case`repeat`:return this.compileRepeat(e);default:throw Error(`unreachable regex node kind`)}}build(e){let t=this.compileNode(e),n=this.add({kind:`match`});return this.patch(t.out,n),{states:this.states,start:t.start,matchState:n}}};function zx(e){return new Rx().build(e)}function Bx(e,t,n,r){let i=new Set,a=new Set,o=[...t];for(;o.length>0;){let t=o.pop();if(t===void 0||a.has(t))continue;a.add(t);let s=e.states[t];if(s!==void 0)switch(s.kind){case`char`:case`match`:i.add(t);break;case`split`:o.push(s.to1,s.to2);break;case`anchorStart`:n===0&&o.push(s.to);break;case`anchorEnd`:n===r&&o.push(s.to)}}return i}function Vx(e,t,n){let r=new Set;for(let i of t){let t=e.states[i];t?.kind===`char`&&t.test(n)&&r.add(t.to)}return r}function Hx(e,t){let n=t.length,r=Bx(e,[e.start],0,n);if(r.has(e.matchState))return!0;for(let i=0;i<n;i+=1){let a=t.charCodeAt(i),o=Vx(e,r,a);if(o.add(e.start),r=Bx(e,[...o],i+1,n),r.has(e.matchState))return!0}return!1}function Ux(e){let t=zx(Lx(e));return{test:e=>Hx(t,e)}}function Wx(e,t){if(e.status===`definite`&&!e.value||t.status===`definite`&&!t.value)return Q(!1);let n=Rb(e,t);return n===void 0?Q(!0):{status:`indeterminate`,reason:n}}function Gx(e,t){if(e.status===`definite`&&e.value||t.status===`definite`&&t.value)return Q(!0);let n=Rb(e,t);return n===void 0?Q(!1):{status:`indeterminate`,reason:n}}function Kx(e,t,n){switch(e){case`gt`:return t>n;case`gte`:return t>=n;case`lt`:return t<n;case`lte`:return t<=n;case`eq`:return t===n;case`neq`:return t!==n;default:throw Error(`unreachable comparison operator`)}}var qx={ms:1,s:1e3,min:6e4,h:36e5,d:864e5};function Jx(e,t){return e*qx[t]}function Yx(e){let t=Date.parse(e);return Number.isNaN(t)?void 0:t}function Xx(e){return $(`wrong-type`,`'${e}' is not a parseable ISO-8601 timestamp`)}function Zx(e){let t=new Date(e);return Number.isNaN(t.getTime())?$(`domain-error`,`the resulting instant falls outside the representable timestamp range`):Q({kind:`instant`,value:t.toISOString()})}function Qx(e,t,n){switch(t.kind){case`number`:return n.kind===`number`?Fb(t.unit,n.unit)?Q(Kx(e,t.value,n.value)):$(`wrong-type`,`cannot compare numbers with incompatible units`):$(`wrong-type`,`cannot compare a 'number' value with a '${n.kind}' value`);case`text`:return $(`wrong-type`,`text values are not comparable via 'compare'; use 'textCompare'`);case`boolean`:return n.kind===`boolean`?e!==`eq`&&e!==`neq`?$(`wrong-type`,`booleans have no natural ordering; '${e}' is only defined for 'eq'/'neq'`):Q(e===`eq`?t.value===n.value:t.value!==n.value):$(`wrong-type`,`cannot compare a 'boolean' value with a '${n.kind}' value`);case`instant`:{if(n.kind!==`instant`)return $(`wrong-type`,`cannot compare an 'instant' value with a '${n.kind}' value`);let r=Yx(t.value);if(r===void 0)return Xx(t.value);let i=Yx(n.value);return i===void 0?Xx(n.value):Q(Kx(e,r,i))}case`duration`:return n.kind===`duration`?Q(Kx(e,Jx(t.value,t.unit),Jx(n.value,n.unit))):$(`wrong-type`,`cannot compare a 'duration' value with a '${n.kind}' value`);case`complex`:return e!==`eq`&&e!==`neq`?$(`wrong-type`,`ordering operator '${e}' is not defined for complex values; the complex plane has no total order`):n.kind===`complex`?Fb(t.unit,n.unit)?Q(e===`eq`?t.re===n.re&&t.im===n.im:t.re!==n.re||t.im!==n.im):$(`wrong-type`,`cannot compare complex values with incompatible units`):$(`wrong-type`,`cannot compare a 'complex' value with a '${n.kind}' value`);default:throw Error(`unreachable computed-value kind`)}}function $x(e,t,n){if(t.kind!==`text`)return $(`wrong-type`,`'textCompare' requires 'text' operands; the left operand is '${t.kind}'`);if(n.kind!==`text`)return $(`wrong-type`,`'textCompare' requires 'text' operands; the right operand is '${n.kind}'`);switch(e){case`equals`:return Q(t.value===n.value);case`notEquals`:return Q(t.value!==n.value);case`matches`:case`notMatches`:{let r;try{r=new RegExp(n.value)}catch{return $(`wrong-type`,`'${n.value}' is not a valid regular expression pattern`)}let i=r.test(t.value);return Q(e===`matches`?i:!i)}case`portableMatches`:case`portableNotMatches`:{let r;try{r=Ux(n.value)}catch(e){let t=e instanceof Ex?e.message:String(e);return $(`wrong-type`,`'${n.value}' is not a valid trilean-regex pattern: ${t}`)}let i=r.test(t.value);return Q(e===`portableMatches`?i:!i)}default:throw Error(`unreachable text comparison operator`)}}function eS(e,t){switch(e.kind){case`number`:return t.kind===`number`?Fb(e.unit,t.unit)?Q(e.value===t.value):$(`wrong-type`,`cannot compare numbers with incompatible units for membership`):$(`wrong-type`,`cannot compare a 'number' value with a '${t.kind}' value for membership`);case`text`:return t.kind===`text`?Q(e.value===t.value):$(`wrong-type`,`cannot compare a 'text' value with a '${t.kind}' value for membership`);case`boolean`:return t.kind===`boolean`?Q(e.value===t.value):$(`wrong-type`,`cannot compare a 'boolean' value with a '${t.kind}' value for membership`);case`instant`:{if(t.kind!==`instant`)return $(`wrong-type`,`cannot compare an 'instant' value with a '${t.kind}' value for membership`);let n=Yx(e.value);if(n===void 0)return Xx(e.value);let r=Yx(t.value);return r===void 0?Xx(t.value):Q(n===r)}case`duration`:return t.kind===`duration`?Q(Jx(e.value,e.unit)===Jx(t.value,t.unit)):$(`wrong-type`,`cannot compare a 'duration' value with a '${t.kind}' value for membership`);case`complex`:return t.kind===`complex`?Fb(e.unit,t.unit)?Q(e.re===t.re&&e.im===t.im):$(`wrong-type`,`cannot compare complex values with incompatible units for membership`):$(`wrong-type`,`cannot compare a 'complex' value with a '${t.kind}' value for membership`);default:throw Error(`unreachable computed-value kind`)}}function tS(e){return Fb(e,void 0)}function nS(e){switch(e.kind){case`number`:return Q({kind:`number`,value:-e.value,unit:e.unit});case`duration`:return Q({kind:`duration`,value:-e.value,unit:e.unit});case`complex`:return Q({kind:`complex`,re:-e.re,im:-e.im,unit:e.unit});case`text`:case`instant`:case`boolean`:return $(`wrong-type`,`cannot negate a '${e.kind}' value`);default:throw Error(`unreachable computed-value kind`)}}function rS(e,t,n){switch(e){case`add`:return Fb(t.unit,n.unit)?Q({kind:`number`,value:t.value+n.value,unit:t.unit}):$(`wrong-type`,`cannot add numbers with incompatible units`);case`subtract`:return Fb(t.unit,n.unit)?Q({kind:`number`,value:t.value-n.value,unit:t.unit}):$(`wrong-type`,`cannot subtract numbers with incompatible units`);case`multiply`:return Q({kind:`number`,value:t.value*n.value,unit:Ib(t.unit,n.unit)});case`divide`:return n.value===0?$(`domain-error`,`division by zero`):Q({kind:`number`,value:t.value/n.value,unit:Lb(t.unit,n.unit)});case`power`:return!tS(t.unit)||!tS(n.unit)?$(`wrong-type`,`'power' requires dimensionless operands`):t.value<0&&!Number.isInteger(n.value)?$(`domain-error`,`a negative base raised to a non-integer power is not a real number`):t.value===0&&n.value<0?$(`domain-error`,`zero raised to a negative power is a division by zero`):Q({kind:`number`,value:t.value**n.value});case`modulo`:return!tS(t.unit)||!tS(n.unit)?$(`wrong-type`,`'modulo' requires dimensionless operands`):n.value===0?$(`domain-error`,`modulo by zero`):Q({kind:`number`,value:t.value%n.value});default:throw Error(`unreachable arithmetic operator`)}}function iS(e,t,n){switch(e){case`add`:return Q({kind:`duration`,value:Jx(t.value,t.unit)+Jx(n.value,n.unit),unit:`ms`});case`subtract`:return Q({kind:`duration`,value:Jx(t.value,t.unit)-Jx(n.value,n.unit),unit:`ms`});case`multiply`:case`divide`:case`power`:case`modulo`:return $(`wrong-type`,`arithmetic operator '${e}' is not defined between two 'duration' values`);default:throw Error(`unreachable arithmetic operator`)}}function aS(e){return e.kind===`complex`?e:{kind:`complex`,re:e.value,im:0,unit:e.unit}}function oS(e,t){return{kind:`complex`,re:e.re*t.re-e.im*t.im,im:e.re*t.im+e.im*t.re,unit:Ib(e.unit,t.unit)}}function sS(e,t,n){switch(e){case`add`:return Fb(t.unit,n.unit)?Q({kind:`complex`,re:t.re+n.re,im:t.im+n.im,unit:t.unit}):$(`wrong-type`,`cannot add complex values with incompatible units`);case`subtract`:return Fb(t.unit,n.unit)?Q({kind:`complex`,re:t.re-n.re,im:t.im-n.im,unit:t.unit}):$(`wrong-type`,`cannot subtract complex values with incompatible units`);case`multiply`:return Q(oS(t,n));case`divide`:{let e=n.re*n.re+n.im*n.im;return e===0?$(`domain-error`,`division by zero`):Q({kind:`complex`,re:(t.re*n.re+t.im*n.im)/e,im:(t.im*n.re-t.re*n.im)/e,unit:Lb(t.unit,n.unit)})}case`modulo`:return $(`domain-error`,`'modulo' is undefined for complex values`);default:throw Error(`unreachable arithmetic operator`)}}function cS(e,t){if(t.kind!==`number`||!Number.isInteger(t.value))return $(`wrong-type`,`'power' with a complex operand requires a real integer exponent`);if(!tS(e.unit)||!tS(t.unit))return $(`wrong-type`,`'power' requires dimensionless operands`);let n={kind:`complex`,re:1,im:0,unit:{}},r=aS(e),i=n;for(let e=0;e<Math.abs(t.value);e+=1)i=oS(i,r);return t.value>=0?Q(i):sS(`divide`,n,i)}function lS(e,t,n){if(t.kind===`instant`&&n.kind===`instant`&&e===`subtract`){let e=Yx(t.value);if(e===void 0)return Xx(t.value);let r=Yx(n.value);return r===void 0?Xx(n.value):Q({kind:`duration`,value:e-r,unit:`ms`})}if(t.kind===`instant`&&n.kind===`duration`&&e===`add`){let e=Yx(t.value);return e===void 0?Xx(t.value):Zx(e+Jx(n.value,n.unit))}if(t.kind===`duration`&&n.kind===`instant`&&e===`add`){let e=Yx(n.value);return e===void 0?Xx(n.value):Zx(e+Jx(t.value,t.unit))}return t.kind===`instant`||n.kind===`instant`?$(`wrong-type`,`arithmetic operator '${e}' is not defined between a '${t.kind}' and a '${n.kind}' value`):t.kind===`duration`&&n.kind===`duration`?iS(e,t,n):t.kind===`duration`||n.kind===`duration`?$(`wrong-type`,`arithmetic operator '${e}' is not defined between a '${t.kind}' and a '${n.kind}' value`):t.kind!==`number`&&t.kind!==`complex`?$(`wrong-type`,`arithmetic requires numeric operands; got a '${t.kind}' value`):n.kind!==`number`&&n.kind!==`complex`?$(`wrong-type`,`arithmetic requires numeric operands; got a '${n.kind}' value`):t.kind===`complex`||n.kind===`complex`?e===`power`?cS(t,n):sS(e,aS(t),aS(n)):rS(e,t,n)}function uS(e,t){if(e!==void 0){if(t.kind!==`number`&&t.kind!==`complex`)return $(`wrong-type`,`a unit was expected on a reference that resolved to a non-numeric value`);if(!Fb(e,t.unit))return $(`wrong-type`,`the resolved value's unit does not match the reference's expected unit`)}}function dS(e,t,n){let r=Object.hasOwn(e,t)?e[t]:void 0;if(r===void 0)return $(`wrong-type`,`no function registered under the name '${t}'`);let i=r(n);return`domainError`in i?$(`domain-error`,i.domainError):Q(i)}async function fS(e,t,n,r,i,a,o,s,c){let l=s.checkNode(c);if(l!==void 0)return l;switch(e.kind){case`not`:{let l=await fS(e.operand,t,n,r,i,a,o,s,c+1);return l.status===`indeterminate`?l:Q(!l.value)}case`and`:{let[l,u]=await Promise.all([fS(e.left,t,n,r,i,a,o,s,c+1),fS(e.right,t,n,r,i,a,o,s,c+1)]);return Wx(l,u)}case`or`:{let[l,u]=await Promise.all([fS(e.left,t,n,r,i,a,o,s,c+1),fS(e.right,t,n,r,i,a,o,s,c+1)]);return Gx(l,u)}case`allOf`:return(await Promise.all(e.operands.map(async e=>fS(e,t,n,r,i,a,o,s,c+1)))).reduce(Wx,Q(!0));case`anyOf`:return(await Promise.all(e.operands.map(async e=>fS(e,t,n,r,i,a,o,s,c+1)))).reduce(Gx,Q(!1));case`compare`:{let[l,u]=await Promise.all([pS(e.left,t,n,r,i,a,o,s,c+1),pS(e.right,t,n,r,i,a,o,s,c+1)]);return l.status===`indeterminate`?l:u.status===`indeterminate`?u:Qx(e.op,l.value,u.value)}case`textCompare`:{let[l,u]=await Promise.all([pS(e.left,t,n,r,i,a,o,s,c+1),pS(e.right,t,n,r,i,a,o,s,c+1)]);return l.status===`indeterminate`?l:u.status===`indeterminate`?u:$x(e.op,l.value,u.value)}case`memberOf`:{let l=await pS(e.operand,t,n,r,i,a,o,s,c+1);if(l.status===`indeterminate`)return l;let u=await Promise.all(e.candidates.map(async e=>{let u=await pS(e,t,n,r,i,a,o,s,c+1);return u.status===`indeterminate`?u:eS(l.value,u.value)}));for(let t of u)if(t.status===`definite`&&t.value)return Q(e.op===`in`);let d=Rb(...u);return d===void 0?Q(e.op===`notIn`):{status:`indeterminate`,reason:d}}case`exists`:{let l=await pS(e.operand,t,n,r,i,a,o,s,c+1);return l.status===`indeterminate`&&l.reason.code===`not-found`?Q(!1):Q(!0)}case`some`:case`every`:{let r=await Sx(fS,e.collection,e.filter,t,n,i,a,o,s,c+1),l=(await Promise.all(r.map(async({item:t,filterOutcome:r})=>{if(r!==`exclude`)return r===`include`?fS(e.item,t,n,void 0,i,a,o,s,c+1):r}))).filter(e=>e!==void 0),u=e.kind===`some`?Gx:Wx,d=e.kind===`some`?Q(!1):Q(!0);return l.reduce(u,d)}case`treeReference`:{if(n.resolveTree===void 0)return $(`wrong-type`,`no tree resolver registered for treeReference nodes`);let l=JSON.stringify(e.key);if(a.has(l))return $(`domain-error`,`circular treeReference detected`);if(o>=100)return $(`domain-error`,`treeReference chain exceeds the maximum depth of 100`);let u=await n.resolveTree(e.key,t);if(!u.found)return $(`not-found`,`treeReference key did not resolve to a tree`);let d=rx.safeParse(u.node);return d.success?fS(d.data,t,n,r,i,new Set([...a,l]),o+1,s,c+1):$(`wrong-type`,`the referenced tree is not a valid PredicateNode`)}default:throw Error(`unreachable predicate node kind`)}}async function pS(e,t,n,r,i,a,o,s,c){let l=s.checkNode(c);if(l!==void 0)return l;switch(e.kind){case`reference`:{let r=await n.resolveValue(e.key,t);if(!r.found)return $(`not-found`,`no value found for reference key ${JSON.stringify(e.key)}`);let i=uS(e.unit,r.value);return i===void 0?Q(r.value):i}case`accumulator`:return r===void 0?$(`wrong-type`,`accumulator used outside a reduce fold's combine expression`):Q(r);case`call`:{let l=await Promise.all(e.args.map(async e=>pS(e,t,n,r,i,a,o,s,c+1))),u=[];for(let e of l){if(e.status===`indeterminate`)return e;u.push(e.value)}return dS(i,e.fn,u)}case`numberLiteral`:return Q({kind:`number`,value:e.value,unit:e.unit});case`textLiteral`:return Q({kind:`text`,value:e.value});case`booleanLiteral`:return Q({kind:`boolean`,value:e.value});case`instantLiteral`:return Q({kind:`instant`,value:e.value});case`durationLiteral`:return Q({kind:`duration`,value:e.value,unit:e.unit});case`complexLiteral`:return`re`in e?Q({kind:`complex`,re:e.re,im:e.im,unit:e.unit}):Q(jb(e.magnitude,e.phase,e.unit));case`arithmetic`:{let[l,u]=await Promise.all([pS(e.left,t,n,r,i,a,o,s,c+1),pS(e.right,t,n,r,i,a,o,s,c+1)]);return l.status===`indeterminate`?l:u.status===`indeterminate`?u:lS(e.op,l.value,u.value)}case`negate`:{let l=await pS(e.operand,t,n,r,i,a,o,s,c+1);return l.status===`indeterminate`?l:nS(l.value)}case`lookup`:{let l=await Promise.all(e.keys.map(async e=>pS(e,t,n,r,i,a,o,s,c+1))),u=[];for(let e of l){if(e.status===`indeterminate`)return e;u.push(e.value)}let d=await n.resolveLookup(e.table,u,t);return d.found?Q(d.value):$(`not-found`,`no match found in lookup table ${JSON.stringify(e.table)}`)}case`conditional`:{if((e.hitPolicy??`first`)===`first`){for(let{when:l,then:u}of e.cases){let e=await fS(l,t,n,r,i,a,o,s,c+1);if(e.status===`indeterminate`)return e;if(e.value)return pS(u,t,n,r,i,a,o,s,c+1)}return pS(e.fallback,t,n,r,i,a,o,s,c+1)}let l=await Promise.all(e.cases.map(async({when:e,then:l})=>({then:l,whenResult:await fS(e,t,n,r,i,a,o,s,c+1)}))),u=l.filter(({whenResult:e})=>e.status===`definite`&&e.value);if(u.length>=2)return $(`domain-error`,`more than one case matched under the 'unique' hit policy`);let d=Rb(...l.map(({whenResult:e})=>e));if(d!==void 0)return{status:`indeterminate`,reason:d};let[f]=u;return pS(f===void 0?e.fallback:f.then,t,n,r,i,a,o,s,c+1)}case`fold`:{let r=await Sx(fS,e.collection,e.filter,t,n,i,a,o,s,c+1),l=Cx(r);if(l!==void 0)return{status:`indeterminate`,reason:l};let u=r.filter(({filterOutcome:e})=>e===`include`).map(({item:e})=>e);if(e.combiner.mode===`reduce`){let r=await pS(e.combiner.initial,t,n,void 0,i,a,o,s,c+1);if(r.status===`indeterminate`)return r;let l=r.value;for(let t of u){let r=await pS(e.combiner.combine,t,n,l,i,a,o,s,c+1);if(r.status===`indeterminate`)return r;l=r.value}return Q(l)}if(u.length===0)return $(`domain-error`,`'${e.combiner.mode}' has no participating items to seed a running result from`);let d=e.combiner.mode===`max`?`gt`:`lt`,f;for(let t of u){let r=await pS(e.combiner.item,t,n,void 0,i,a,o,s,c+1);if(r.status===`indeterminate`)return r;if(f===void 0){f=r.value;continue}let l=Qx(d,r.value,f);if(l.status===`indeterminate`)return l;l.value&&(f=r.value)}if(f===void 0)throw Error(`unreachable: max/min over a non-empty participating list produced no running result`);return Q(f)}case`delegate`:{if(n.resolveDelegate===void 0)return $(`wrong-type`,`no delegate handler registered for external system '${e.system}'`);let r=await n.resolveDelegate(e.system,e.payload,t);return r.found?Q(r.value):$(`not-found`,`delegate handler for external system '${e.system}' reported no value`)}case`treeReference`:{if(n.resolveTree===void 0)return $(`wrong-type`,`no tree resolver registered for treeReference nodes`);let l=JSON.stringify(e.key);if(a.has(l))return $(`domain-error`,`circular treeReference detected`);if(o>=100)return $(`domain-error`,`treeReference chain exceeds the maximum depth of 100`);let u=await n.resolveTree(e.key,t);if(!u.found)return $(`not-found`,`treeReference key did not resolve to a tree`);let d=vx.safeParse(u.node);return d.success?pS(d.data,t,n,r,i,new Set([...a,l]),o+1,s,c+1):$(`wrong-type`,`the referenced tree is not a valid ExpressionNode`)}default:throw Error(`unreachable expression node kind`)}}function mS({functions:e=yx,maxNodes:t=bx,maxNestingDepth:n=500}){return{evaluatePredicate:async(r,i,a)=>fS(r,i,a,void 0,e,new Set,0,xx(t,n),0),evaluateValue:async(r,i,a)=>pS(r,i,a,void 0,e,new Set,0,xx(t,n),0)}}var{evaluatePredicate:hS,evaluateValue:gS}=mS({}),_S=Kg(rx),vS=`bearer-is`,yS=`expires-at`,bS=`scope-narrows`,xS=`capability-is`,SS=`depth-remaining`,CS=[vS,yS,bS,xS,SS];function wS(e){return e===`bearer-is`||e===`expires-at`||e===`scope-narrows`||e===`capability-is`||e===`depth-remaining`}function TS(e){return{found:!0,value:{kind:`boolean`,value:e}}}var ES={[vS]:(e,t)=>t.parentClaims===void 0?TS(!1):TS(Hy(t.parentClaims.bearer,t.childIssuer)),[yS]:(e,t)=>t.parentClaims===void 0?TS(!1):TS(t.candidate.expires<=t.parentClaims.expires),[bS]:(e,t)=>t.parentClaims===void 0?TS(!1):TS(Gy(t.parentClaims.scope,t.candidate.scope)),[xS]:(e,t)=>t.parentClaims===void 0?TS(!1):TS(t.parentClaims.capability===t.candidate.capability),[SS]:(e,t)=>{if(t.parentClaims===void 0)return TS(!1);let n=t.parentClaims[`delegations-remaining`];return TS(n===void 0||t.candidate.delegationsRemaining!==void 0&&t.candidate.delegationsRemaining<n)}};function DS(e){return{kind:`compare`,op:`eq`,left:{kind:`delegate`,system:e,payload:null},right:{kind:`booleanLiteral`,value:!0}}}var OS=async()=>Promise.resolve({found:!1}),kS=async()=>Promise.resolve({found:!1}),AS=async()=>Promise.resolve([]);async function jS(e,t,n){let r={childIssuer:t,candidate:n,parentClaims:e},i={resolveValue:OS,resolveLookup:kS,resolveCollection:AS,resolveDelegate:async(e,t)=>wS(e)?ES[e](t,r):{found:!1}};for(let e of CS){let t=await hS(DS(e),r,i);if(t.status!==`definite`||!t.value)return e}}async function MS(e,t,n,r={}){let i={clock:n,claims:t},a={resolveValue:OS,resolveLookup:kS,resolveCollection:AS,resolveDelegate:async(e,t)=>{let n=Object.hasOwn(r,e)?r[e]:void 0;if(n===void 0)return{found:!1};try{return await n(t,i)}catch{return{found:!1}}}};for(let t of e){let e=await hS(t,i,a);if(e.status!==`definite`||!e.value)return{ok:!1,reason:`not_satisfied`}}return{ok:!0}}function NS(e,t){return hc([`Signature1`,e,new Uint8Array,t],Qs)}function PS(e){return Uint8Array.from(e)}function FS(e){return PS(hc(e,Qs))}function IS(e){return FS({1:e.identityKey.alg,4:e.deviceId})}function LS(e){let[,,t]=e;if(t===null)return;let n;try{n=rl(t,il)}catch{return}let r=ty.safeParse(n);return r.success?r.data:void 0}async function RS(e,t){let n=await BS(e,{identity:t.identity,clock:t.clock,revocation:t.revocation,...t.extraPredicateResolvers===void 0?{}:{extraPredicateResolvers:t.extraPredicateResolvers}});return n.ok&&t.expectedBearer!==void 0&&!Hy(n.claims.bearer,t.expectedBearer)?{ok:!1,reason:`bearer_mismatch`}:n}async function zS(e,t,n){if(Hy(e.issuer,t.issuer))return!0;if(e.authorization===void 0)return!1;let r;try{r=rl(e.authorization,il)}catch{return!1}let i=ey.safeParse(r);if(!i.success)return!1;let a=await RS(i.data,{...n,expectedBearer:e.issuer});return a.ok&&a.claims.capability===`manage:revoke`&&Gy(a.claims.scope,t.scope)}async function BS(e,t){let[n,,r,i]=e;if(r===null)return{ok:!1,reason:`malformed`};let a;try{a=rl(r,il)}catch{return{ok:!1,reason:`malformed`}}let o=ty.safeParse(a);if(!o.success)return{ok:!1,reason:`malformed`};let s=o.data;if(!await t.identity.verify(s[`issuer-key`],NS(n,r),i))return{ok:!1,reason:`bad_signature`};if(!Hy(await t.identity.deriveDeviceId(s[`issuer-key`][`public-key`]),s.issuer))return{ok:!1,reason:`wrong_issuer`};let c=t.clock.now();if(s.expires<=c)return{ok:!1,reason:`expired`};if(s[`not-before`]!==void 0&&s[`not-before`]>c)return{ok:!1,reason:`not_yet_valid`};let l=s[`valid-until`];if(l!==void 0&&l<=c)return{ok:!1,reason:`content_expired`};let u=await t.revocation.entriesFor(s[`token-id`]);for(let e of u)if(await zS(e,s,t))return{ok:!1,reason:`revoked`};if(s.conditions!==void 0){let e;try{e=rl(s.conditions,il)}catch{return{ok:!1,reason:`conditions_invalid`}}let n=_S.safeParse(e);if(!n.success)return{ok:!1,reason:`conditions_invalid`};if(!(await MS(n.data,s,t.clock,t.extraPredicateResolvers)).ok)return{ok:!1,reason:`conditions_not_satisfied`}}if(s.parent!==void 0){let e;try{e=rl(s.parent,il)}catch{return{ok:!1,reason:`parent_invalid`}}let n=ey.safeParse(e);if(!n.success)return{ok:!1,reason:`parent_invalid`};let r=await BS(n.data,t);if(!r.ok)return{ok:!1,reason:`parent_invalid`};let i={capability:s.capability,scope:s.scope,expires:s.expires,...s[`delegations-remaining`]===void 0?{}:{delegationsRemaining:s[`delegations-remaining`]}};return await jS(r.claims,s.issuer,i)===void 0?{ok:!0,claims:s,rootIssuer:r.rootIssuer,rootIssuerKey:r.rootIssuerKey,depth:r.depth+1}:{ok:!1,reason:`delegation_exceeds_parent`}}return{ok:!0,claims:s,rootIssuer:s.issuer,rootIssuerKey:s[`issuer-key`],depth:0}}var VS={"bearer-is":`parent_bearer_mismatch`,"expires-at":`expires_exceeds_parent`,"scope-narrows":`scope_does_not_narrow`,"capability-is":`capability_mismatch`,"depth-remaining":`delegation_exceeds_parent`};async function HS(e,t,n){let r=await jS(e,t,n);return r===void 0?void 0:VS[r]}async function US(e){if(e.expires<=e.clock.now())return{ok:!1,reason:`already_expired`};let t;if(e.parent!==void 0){let n=LS(e.parent);if(n===void 0)return{ok:!1,reason:`parent_malformed`};let r=await HS(n,e.identity.deviceId,{capability:e.capability,scope:e.scope,expires:e.expires,...e.delegationsRemaining===void 0?{}:{delegationsRemaining:e.delegationsRemaining}});if(r!==void 0)return{ok:!1,reason:r};t=FS(e.parent)}let n=FS({"token-id":e.tokenId,issuer:e.identity.deviceId,"issuer-key":e.identity.identityKey,bearer:e.bearer,capability:e.capability,scope:e.scope,expires:e.expires,...e.notBefore===void 0?{}:{"not-before":e.notBefore},...t===void 0?{}:{parent:t},...e.delegationsRemaining===void 0?{}:{"delegations-remaining":e.delegationsRemaining},...e.conditions===void 0?{}:{conditions:FS(e.conditions)}}),r=IS(e.identity);return{ok:!0,token:[r,{},n,await e.identity.sign(NS(r,n))]}}var WS=`webrtc:signal`,GS={kind:`node`};function KS(e){return typeof e==`object`&&`verb`in e&&e.verb===`webrtc.offer`}function qS(e){return typeof e==`object`&&`verb`in e&&e.verb===`webrtc.answer`}function JS(e){return typeof e==`object`&&`verb`in e&&e.verb===`webrtc.ice-candidate`}function YS(e,t){return{verb:WS,params:{verb:`webrtc.offer`,"negotiation-id":e,sdp:t}}}function XS(e,t){return{verb:WS,params:{verb:`webrtc.answer`,"negotiation-id":e,sdp:t}}}function ZS(e,t){return{verb:WS,params:{verb:`webrtc.ice-candidate`,"negotiation-id":e,...t===void 0?{}:{candidate:t}}}}function QS(e){return{candidate:e.candidate,...e.sdpMid===null?{}:{"sdp-mid":e.sdpMid},...e.sdpMLineIndex===null?{}:{"sdp-m-line-index":e.sdpMLineIndex},...e.usernameFragment===null?{}:{"username-fragment":e.usernameFragment}}}function $S(e){return{candidate:e.candidate,...e[`sdp-mid`]===void 0?{}:{sdpMid:e[`sdp-mid`]},...e[`sdp-m-line-index`]===void 0?{}:{sdpMLineIndex:e[`sdp-m-line-index`]},...e[`username-fragment`]===void 0?{}:{usernameFragment:e[`username-fragment`]}}}function eC(){let e=0;return()=>{let t=e;return e+=1,t}}async function tC(e,t){if(e.token===void 0)return!1;let n=await RS(e.token,t);return n.ok?n.claims.capability===`webrtc:signal`&&n.claims.scope.kind===GS.kind:!1}function nC(e){let t=[],n=[],r=!1,i=null;function a(){r=!0;for(let e of n.splice(0))e.resolve({value:void 0,done:!0})}function o(e){i=e,r=!0;for(let t of n.splice(0))t.reject(e)}e.addEventListener(`message`,r=>{if(!(r.data instanceof ArrayBuffer)){o(Error(`expected a binary data channel message`)),e.close();return}let i;try{i=ub(r.data)}catch(t){if(t instanceof lb)return;o(t instanceof Error?t:Error(`frame body failed to decode: ${String(t)}`)),e.close();return}let a=n.shift();a?a.resolve({value:i,done:!1}):t.push(i)}),e.addEventListener(`close`,a),e.addEventListener(`error`,a);let s={[Symbol.asyncIterator](){return{next:async()=>c()}}};async function c(){let e=t.shift();return e===void 0?i===null?r?Promise.resolve({value:void 0,done:!0}):new Promise((e,t)=>{n.push({resolve:e,reject:t})}):Promise.reject(i):Promise.resolve({value:e,done:!1})}return{async send(t){return e.readyState===`open`?(e.send(sb(t)),Promise.resolve()):Promise.reject(Error(`data channel is not open (state: ${e.readyState})`))},receive:()=>s,async close(){return e.close(),Promise.resolve()}}}var rC=`wire-mesh`,iC={entriesFor:async()=>Promise.resolve([])};function aC(e,t){for(let n of t.localTracks??[])e.addTrack(n);t.onRemoteTrack!==void 0&&e.addEventListener(`track`,t.onRemoteTrack)}function oC(e,t){e.addEventListener(`open`,()=>{t(nC(e))},{once:!0})}var sC=16,cC=36e5;async function lC(e,t){let n=new Uint8Array(sC);crypto.getRandomValues(n);let r=await US({identity:e,clock:t,tokenId:n,bearer:e.deviceId,capability:WS,scope:GS,expires:t.now()+cC});if(!r.ok)throw Error(`could not mint a webrtc:signal token: ${r.reason}`);return r.token}function uC(e,t){let n={identity:t.identity,clock:t.clock,revocation:iC},r=new Map,i=new Map,a=eC();async function o(t,n){let r=ZS(t,n===null?void 0:QS(n));await e.sendManageRequest(r,GS,i.get(t))}async function s(a,s){if(!await tC(a,n)){await a.respond({result:`error`,code:`unauthorized`});return}let c=s[`negotiation-id`];i.set(c,a.fromDevice);let l=new RTCPeerConnection;r.set(c,l),aC(l,t),l.addEventListener(`icecandidate`,e=>{o(c,e.candidate)}),l.addEventListener(`datachannel`,e=>{e.channel.binaryType=`arraybuffer`,oC(e.channel,t.onIncomingConnection)}),await l.setRemoteDescription({type:`offer`,sdp:s.sdp});let u=await l.createAnswer();await l.setLocalDescription(u),await a.respond({result:`ok`}),await e.sendManageRequest(XS(c,u.sdp??``),GS,a.fromDevice)}async function c(e,t){let n=r.get(t[`negotiation-id`]);n!==void 0&&await n.setRemoteDescription({type:`answer`,sdp:t.sdp}),await e.respond({result:`ok`})}async function l(e,t){let n=r.get(t[`negotiation-id`]);n!==void 0&&await n.addIceCandidate(t.candidate===void 0?null:$S(t.candidate)),await e.respond({result:`ok`})}async function u(){for await(let t of e.incomingManageRequests){if(t.command.verb!==`webrtc:signal`)continue;let e=t.command.params;KS(e)?await s(t,e):qS(e)?await c(t,e):JS(e)&&await l(t,e)}}return u(),{async initiate(n){let s=a();i.set(s,n);let c=new RTCPeerConnection;r.set(s,c),aC(c,t),c.addEventListener(`icecandidate`,e=>{o(s,e.candidate)});let l=c.createDataChannel(rC);l.binaryType=`arraybuffer`;let u=new Promise((e,t)=>{oC(l,e),l.addEventListener(`error`,()=>{t(Error(`data channel failed to open`))},{once:!0})}),d=await c.createOffer();await c.setLocalDescription(d);let f=await e.sendManageRequest(YS(s,d.sdp??``),GS,n,await lC(t.identity,t.clock));if(f.result===`error`)throw r.delete(s),i.delete(s),c.close(),Error(`webrtc offer rejected: ${f.code}`);return u}}}function dC(e){let[t,n]=(0,O.useState)(void 0);return(0,O.useEffect)(()=>{let t={cancelled:!1};return(async()=>{for await(let r of e.events){if(t.cancelled)return;n(r)}})(),()=>{t.cancelled=!0}},[e]),t}var fC=16;function pC(e){let t=``;for(let n of e)t+=n.toString(fC).padStart(2,`0`);return t}function mC(e){if(e.state.status!==`connected`)return``;switch(e.state.handshake.status){case`pending`:return` · handshake pending`;case`negotiated`:return` · v${String(e.state.handshake.version)} · ${e.state.handshake.sharedDomains.join(`, `)}`;case`unanswered`:return` · handshake unanswered (relay-only node?)`;case`rejected`:return` · handshake rejected (${e.state.handshake.reason})`}return``}function hC(e){let{state:t}=e;switch(t.status){case`connecting`:return`connecting…`;case`connected`:return`connected${mC(e)}`;case`reconnecting`:return`reconnecting (attempt ${String(t.attempt)}, ${t.reason})…`;case`closed`:return`closed (${t.reason})`;case`idle`:return`idle`}return``}function gC(e){return JSON.stringify(e,(e,t)=>t instanceof Uint8Array?`<${String(t.byteLength)} bytes>`:t)}function _C({address:e,session:t,onClose:n,onMessagePeer:r}){let i=dC(t),a=i===void 0?`idle`:hC(i),o=i?.directory??[],s=i?.frameLog??[];return(0,M.jsxs)(Ia,{withBorder:!0,padding:`md`,radius:`md`,children:[(0,M.jsxs)(mi,{justify:`space-between`,mb:`xs`,children:[(0,M.jsx)(Yi,{fw:600,children:e}),(0,M.jsxs)(mi,{children:[(0,M.jsx)(ka,{size:`xs`,disabled:i?.state.status!==`connected`,onClick:()=>{t.sendPing()},children:`Send ping`}),(0,M.jsx)(ka,{size:`xs`,color:`red`,variant:`light`,onClick:n,children:`Disconnect`})]})]}),(0,M.jsx)(Yi,{fw:600,size:`sm`,mb:`sm`,children:a}),(0,M.jsx)(Yi,{fw:600,size:`sm`,children:`Peer directory`}),o.length===0?(0,M.jsx)(Yi,{size:`sm`,c:`dimmed`,children:`No gossip received yet.`}):(0,M.jsxs)(F,{striped:!0,children:[(0,M.jsx)(F.Thead,{children:(0,M.jsxs)(F.Tr,{children:[(0,M.jsx)(F.Th,{children:`device`}),(0,M.jsx)(F.Th,{children:`addresses`}),(0,M.jsx)(F.Th,{children:`snapshot (unix s)`}),(0,M.jsx)(F.Th,{})]})}),(0,M.jsx)(F.Tbody,{children:o.map(e=>(0,M.jsxs)(F.Tr,{children:[(0,M.jsx)(F.Td,{children:pC(e.device)}),(0,M.jsx)(F.Td,{children:e.advert.addresses.join(`, `)}),(0,M.jsx)(F.Td,{children:e.advert[`snapshot-seconds`]}),(0,M.jsx)(F.Td,{children:(0,M.jsx)(ka,{size:`xs`,onClick:()=>{r(e.device)},children:`Message`})})]},pC(e.device)))})]}),(0,M.jsx)(Yi,{fw:600,size:`sm`,mt:`md`,children:`Frame log`}),(0,M.jsx)(F.ScrollContainer,{minWidth:0,h:384,children:(0,M.jsxs)(F,{children:[(0,M.jsx)(F.Thead,{children:(0,M.jsxs)(F.Tr,{children:[(0,M.jsx)(F.Th,{children:`direction`}),(0,M.jsx)(F.Th,{children:`frame`})]})}),(0,M.jsx)(F.Tbody,{children:s.map((e,t)=>(0,M.jsxs)(F.Tr,{children:[(0,M.jsx)(F.Td,{children:e.direction}),(0,M.jsx)(F.Td,{children:gC(e.frame)})]},t))})]})})]})}function vC({peers:e,onConnect:t,onDismiss:n}){return e.length===0?null:(0,M.jsxs)(Ia,{withBorder:!0,padding:`md`,radius:`md`,"data-testid":`discovered-peers`,children:[(0,M.jsx)(Yi,{fw:600,size:`sm`,mb:`xs`,children:`Discovered peers`}),(0,M.jsxs)(F,{striped:!0,children:[(0,M.jsx)(F.Thead,{children:(0,M.jsxs)(F.Tr,{children:[(0,M.jsx)(F.Th,{children:`device`}),(0,M.jsx)(F.Th,{children:`addresses`}),(0,M.jsx)(F.Th,{})]})}),(0,M.jsx)(F.Tbody,{children:e.map(e=>(0,M.jsxs)(F.Tr,{children:[(0,M.jsx)(F.Td,{children:pC(e.device)}),(0,M.jsx)(F.Td,{children:e.addresses.join(`, `)}),(0,M.jsx)(F.Td,{children:(0,M.jsxs)(mi,{gap:`xs`,children:[(0,M.jsx)(ka,{size:`xs`,onClick:()=>{t(e.key)},children:`Connect`}),(0,M.jsx)(ka,{size:`xs`,variant:`light`,color:`red`,onClick:()=>{n(e.key)},children:`Dismiss`})]})})]},e.key))})]})]})}function yC(e,t){return e.sentAt===t.sentAt?Ey(e.messageId).localeCompare(Ey(t.messageId)):e.sentAt-t.sentAt}function bC(e,t){let n=new Set(e.map(e=>Ey(e.messageId))),r=t.filter(e=>!n.has(Ey(e.messageId)));return r.length===0?e:[...e,...r].sort(yC)}function xC(e,t,n){let r=e.get(t);return r===void 0?e:new Map(e).set(t,n(r))}function SC(e,t){switch(t.type){case`opened`:{let n=e.get(t.roomPath);return new Map(e).set(t.roomPath,{roomPath:t.roomPath,participants:t.participants,session:t.session,token:void 0,status:`connected`,messages:n?.messages??[],notices:[],outgoing:n?.outgoing??[],pendingJoinRequest:void 0,unread:n?.unread??0})}case`restored`:return e.get(t.roomPath)===void 0?new Map(e).set(t.roomPath,{roomPath:t.roomPath,participants:t.participants,session:void 0,token:void 0,status:`closed`,messages:bC([],t.messages),notices:[],outgoing:[],pendingJoinRequest:void 0,unread:0}):xC(e,t.roomPath,e=>({...e,messages:bC(e.messages,t.messages)}));case`notices`:return xC(e,t.roomPath,e=>({...e,notices:t.notices}));case`message`:return xC(e,t.roomPath,e=>{let n=bC(e.messages,[t.message]),r=n!==e.messages;return{...e,messages:n,unread:r&&t.message.direction===`received`?e.unread+1:e.unread}});case`read`:return xC(e,t.roomPath,e=>e.unread===0?e:{...e,unread:0});case`outgoing`:return xC(e,t.roomPath,e=>({...e,outgoing:e.outgoing.some(e=>e.localId===t.entry.localId)?e.outgoing.map(e=>e.localId===t.entry.localId?t.entry:e):[...e.outgoing,t.entry]}));case`outgoing-removed`:return xC(e,t.roomPath,e=>({...e,outgoing:e.outgoing.filter(e=>e.localId!==t.localId)}));case`join-request`:return xC(e,t.roomPath,e=>({...e,pendingJoinRequest:t.request}));case`join-request-settled`:return xC(e,t.roomPath,e=>({...e,pendingJoinRequest:void 0}));case`token`:return xC(e,t.roomPath,e=>({...e,token:t.token}));case`closed`:return xC(e,t.roomPath,e=>({...e,status:`closed`}))}return e}function CC(e,t){let n=Tb(e);return n.kind===`dm`?n.participants.filter(e=>e!==t):n.owner===t?[]:[n.owner]}var wC=12;function TC(e){return e.participants.length===0?e.roomPath:e.participants.map(e=>e.slice(0,wC)).join(`, `)}function EC({conversations:e,selected:t,onSelect:n}){return e.length===0?null:(0,M.jsxs)(Za,{gap:0,"data-testid":`conversation-list`,children:[(0,M.jsx)(Yi,{fw:600,size:`sm`,mb:`xs`,children:`Conversations`}),e.map(e=>(0,M.jsx)(Ua,{active:e.roomPath===t,label:TC(e),description:e.status===`connected`?void 0:`offline`,rightSection:(0,M.jsxs)(mi,{gap:4,wrap:`nowrap`,children:[e.pendingJoinRequest!==void 0&&(0,M.jsx)(ba,{color:`blue`,size:`sm`,children:`request`}),e.unread>0&&(0,M.jsx)(ba,{size:`sm`,"aria-label":`${String(e.unread)} unread`,children:e.unread})]}),onClick:()=>{n(e.roomPath)}},e.roomPath))]})}function DC({placeholder:e,ariaLabel:t,submitLabel:n,onSubmit:r,onCancel:i,size:a,autoFocus:o}){let[s,c]=(0,O.useState)(``),[l,u]=(0,O.useState)(void 0);function d(){let e=s.trim();e!==``&&(u(void 0),Promise.resolve(r(e)).then(()=>{c(``)}).catch(e=>{u(e instanceof Error?e.message:String(e))}))}function f(e){e.key===`Enter`&&d(),e.key===`Escape`&&i?.()}return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(mi,{gap:`xs`,flex:1,children:[(0,M.jsx)(_o,{flex:1,...a===void 0?{}:{size:a},placeholder:e,"aria-label":t,autoComplete:`off`,autoFocus:o,value:s,onChange:e=>{c(e.currentTarget.value)},onKeyDown:f}),(0,M.jsx)(ka,{...a===void 0?{}:{size:a},onClick:d,children:n})]}),l!==void 0&&(0,M.jsx)(Yi,{size:`sm`,c:`red`,children:l})]})}var OC=`You`,kC=256,AC=new Intl.DateTimeFormat(void 0,{hour:`2-digit`,minute:`2-digit`});function jC({sentAt:e}){return(0,M.jsx)(Yi,{component:`time`,size:`xs`,c:`dimmed`,dateTime:new Date(e).toISOString(),children:AC.format(e)})}function MC({messages:e,outgoing:t,peerLabel:n,onRetry:r,onDiscard:i}){let a=(0,O.useRef)(null);return(0,O.useEffect)(()=>{let e=a.current;e!==null&&(e.scrollTop=e.scrollHeight)},[e,t]),(0,M.jsx)(Lr,{h:kC,viewportRef:a,children:(0,M.jsxs)(Za,{gap:4,children:[e.map((t,r)=>{let i=t.direction===`sent`,a=r===0||e[r-1]?.direction!==t.direction;return(0,M.jsxs)(Za,{gap:0,align:i?`flex-end`:`flex-start`,mt:a?`xs`:0,children:[a&&(0,M.jsx)(Yi,{size:`xs`,fw:600,c:`dimmed`,children:i?OC:n}),(0,M.jsx)(Yi,{size:`sm`,children:t.text}),(0,M.jsx)(jC,{sentAt:t.sentAt})]},Ey(t.messageId))}),t.map(e=>(0,M.jsxs)(Za,{gap:0,align:`flex-end`,mt:`xs`,children:[(0,M.jsx)(Yi,{size:`xs`,fw:600,c:`dimmed`,children:OC}),(0,M.jsx)(Yi,{size:`sm`,c:`dimmed`,children:e.text}),e.status===`sending`?(0,M.jsx)(Yi,{size:`xs`,c:`dimmed`,children:`Sending`}):(0,M.jsxs)(mi,{gap:`xs`,children:[(0,M.jsx)(Yi,{size:`xs`,c:`red`,children:`Not sent: ${e.error}`}),(0,M.jsx)(ka,{size:`compact-xs`,variant:`light`,onClick:()=>{r(e.localId)},children:`Retry`}),(0,M.jsx)(ka,{size:`compact-xs`,variant:`subtle`,color:`gray`,onClick:()=>{i(e.localId)},children:`Dismiss`})]})]},e.localId))]})})}function NC(e){if(e.plaintext!==void 0)return new TextDecoder().decode(e.plaintext)}function PC({notices:e}){if(e.length===0)return null;let t=e.map((e,t)=>{let n=NC(e);return(0,M.jsx)(P,{children:n===void 0?(0,M.jsx)(Yi,{size:`sm`,c:`dimmed`,fs:`italic`,children:`encrypted notice -- no key held for its epoch`}):(0,M.jsx)(Yi,{size:`sm`,children:n})},t)});return(0,M.jsxs)(Za,{gap:4,children:[t,(0,M.jsxs)(ba,{variant:`light`,color:`gray`,size:`sm`,w:`fit-content`,children:[e.length,` notice`,e.length===1?``:`s`]})]})}var FC=864e5;function IC({view:e,onSend:t,onPostNotice:n,onRetry:r,onDiscard:i}){return(0,M.jsxs)(Za,{gap:`xs`,children:[(0,M.jsxs)(mi,{justify:`space-between`,children:[(0,M.jsx)(Yi,{fw:600,children:e.participants.join(`, `)}),(0,M.jsx)(Yi,{size:`sm`,c:e.status===`connected`?`green`:`dimmed`,children:e.status})]}),e.pendingJoinRequest&&(0,M.jsx)(Wi,{color:`blue`,title:`Message request`,children:(0,M.jsxs)(mi,{justify:`space-between`,children:[(0,M.jsxs)(Yi,{size:`sm`,children:[e.pendingJoinRequest.requesterHex,` wants to message you`]}),(0,M.jsxs)(mi,{children:[(0,M.jsx)(ka,{size:`xs`,onClick:()=>{e.pendingJoinRequest?.decide({kind:`accept`,capability:`room:member`,expires:Date.now()+FC})},children:`Allow`}),(0,M.jsx)(ka,{size:`xs`,color:`red`,variant:`light`,onClick:()=>{e.pendingJoinRequest?.decide({kind:`reject`})},children:`Deny`})]})]})}),(0,M.jsx)(MC,{messages:e.messages,outgoing:e.outgoing,peerLabel:TC(e),onRetry:r,onDiscard:i}),(0,M.jsx)(mi,{children:(0,M.jsx)(DC,{ariaLabel:`Message`,placeholder:`Message`,submitLabel:`Send`,onSubmit:t})}),(0,M.jsx)(Ba,{label:`Durable notices (encrypted, replicated)`,labelPosition:`center`}),(0,M.jsx)(PC,{notices:e.notices}),(0,M.jsx)(mi,{children:(0,M.jsx)(DC,{ariaLabel:`Post a durable notice`,placeholder:`Post a durable notice`,submitLabel:`Post notice`,onSubmit:n})})]})}var LC=`room:member`;async function RC(e,t){let n=await RS(e,{identity:t.identity,clock:t.clock,revocation:t.revocation,expectedBearer:t.expectedBearer});if(!n.ok)return n;if(n.claims.scope.kind!==`room`)return{ok:!1,reason:`wrong_scope_kind`};if(n.claims.scope.path!==t.roomPath)return{ok:!1,reason:`wrong_scope_path`};let r=Tb(t.roomPath),i=Dy(n.rootIssuer);if(r.kind===`owner-named`){if(i!==r.owner)return{ok:!1,reason:`wrong_chain_root`}}else if(t.dmRootPolicy===`either-participant`){if(i!==r.participants[0]&&i!==r.participants[1])return{ok:!1,reason:`wrong_chain_root`}}else if(i!==Dy(t.identity.deviceId))return{ok:!1,reason:`wrong_chain_root`};return{ok:!0,claims:n.claims,rootIssuerKey:n.rootIssuerKey}}var zC=16;function BC(){let e=new Uint8Array(zC);return crypto.getRandomValues(e),e}function VC(e){typeof e==`object`&&e&&`unref`in e&&typeof e.unref==`function`&&Reflect.apply(e.unref,e,[])}function HC(e,t){return{verb:e,params:{verb:`capability.request`,capability:e,...t===void 0?{}:{"valid-until":t}}}}async function UC(e,t,n,r,i,a){let o=await e.sendManageRequest(HC(t,a),n,r,void 0,i);if(o.result!==`ok`)throw Error(`capability request for "${t}" was refused (${o.code})`);let s=pv.safeParse(o);if(!s.success)throw Error(`capability request for "${t}" response was malformed`);return s.data}function WC(e){return async function(t){let n=fv.safeParse(t.command.params);if(!n.success||n.data.capability!==e.capability){await t.respond({result:`error`,code:`malformed`});return}let r=n.data[`valid-until`];if(r!==void 0&&r<=e.clock.now()){await t.respond({result:`error`,code:`expired`});return}let i=!1,a=setTimeout(()=>{i||(i=!0,t.respond({result:`error`,code:`timeout`,message:`no decision within the capability-request timeout`}).catch(()=>void 0))},e.timeoutMs);VC(a),e.onRequest({scope:t.scope,requesterDevice:e.bearerDevice,async decide(n){if(i)return;if(i=!0,clearTimeout(a),n.kind===`reject`){await t.respond({result:`error`,code:`denied`,...n.reason===void 0?{}:{message:n.reason}});return}let r=await US({identity:e.identity,clock:e.clock,tokenId:BC(),bearer:e.bearerDevice,capability:n.capability,scope:t.scope,expires:n.expires,...n.delegationsRemaining===void 0?{}:{delegationsRemaining:n.delegationsRemaining}});if(!r.ok){await t.respond({result:`error`,code:`mint_failed`});return}let o=r.token;await t.respond({result:`ok`,"granted-token":o,...n.extensions??{}})}})}}function GC(e){return async function(t){if(t.command.verb!==e.capability){await t.respond({result:`error`,code:`malformed`});return}let n=mv.safeParse(t.command.params);if(!n.success){await t.respond({result:`error`,code:`malformed`});return}let r=n.data[`granted-token`],i=await RS(r,{identity:e.identity,clock:e.clock,revocation:e.revocation,expectedBearer:e.identity.deviceId});if(!i.ok){await t.respond({result:`error`,code:i.reason});return}if(i.claims.capability!==e.capability){await t.respond({result:`error`,code:`capability_mismatch`});return}if(!Gy(i.claims.scope,t.scope)){await t.respond({result:`error`,code:`scope_mismatch`});return}await t.respond({result:`ok`}),e.onGrant({capability:e.capability,grantedToken:r,scope:t.scope,granterDevice:e.granterDevice})}}var KC=16;function qC(){let e=new Uint8Array(KC);return crypto.getRandomValues(e),e}var JC=3e5;function YC(e,t,n){return{verb:LC,params:{verb:`room.send`,"message-id":t,"sent-at":n,text:e}}}async function XC(e,t,n,r,i){let a=YC(n,qC(),Date.now());return e.sendManageRequest(a,{kind:`room`,path:t},i,r)}async function ZC(e,t,n){let r=await UC(e,LC,{kind:`room`,path:t},n),i=jv.safeParse(r);if(!i.success)throw Error(`room.join response for ${t} was malformed`);return{token:i.data[`granted-token`],members:i.data.members.map(e=>e.device)}}function QC(e,t,n){async function r(e,r){let i=e.scope.path;if(i===void 0||e.token===void 0){await e.respond({result:`error`,code:`unauthorized`});return}if(!(await RC(e.token,{identity:t.identity,clock:t.clock,revocation:t.revocation,expectedBearer:t.peerDevice,roomPath:i})).ok){await e.respond({result:`error`,code:`unauthorized`});return}await e.respond({result:`ok`});let a=r[`message-id`],o=r[`sent-at`],s=r.text;a instanceof Uint8Array&&typeof o==`number`&&typeof s==`string`&&n.onMessage?.({roomPath:i,text:s,messageId:a,sentAt:o})}function i(e){return async n=>{if(n.kind===`reject`){let t={kind:`reject`,...n.reason===void 0?{}:{reason:n.reason}};await e.decide(t);return}let r=[...t.currentMembers?.()??[],t.peerDevice].map(e=>({device:e})),i={kind:`accept`,capability:n.capability,expires:n.expires,...n.delegationsRemaining===void 0?{}:{delegationsRemaining:n.delegationsRemaining},extensions:{members:r}};await e.decide(i)}}let a=WC({capability:LC,identity:t.identity,clock:t.clock,bearerDevice:t.peerDevice,timeoutMs:t.joinRequestTimeoutMs??JC,onRequest(e){let t=e.scope.path,r=n.onJoinRequest;if(t===void 0||r===void 0){e.decide({kind:`reject`,reason:`unsupported verb`});return}r({roomPath:t,requesterDevice:e.requesterDevice,decide:i(e)})}});async function o(e){if(e.scope.path===void 0){await e.respond({result:`error`,code:`missing_scope_path`});return}if(n.onJoinRequest===void 0){await e.respond({result:`error`,code:`unsupported_verb`});return}await a(e)}let s=GC({capability:LC,identity:t.identity,clock:t.clock,revocation:t.revocation,granterDevice:t.peerDevice,onGrant(e){let t=e.scope.path,r=n.onRoomInvite;t!==void 0&&r!==void 0&&r({roomPath:t,granterDevice:e.granterDevice,token:e.grantedToken})}});async function c(e){if(e.scope.path===void 0){await e.respond({result:`error`,code:`missing_scope_path`});return}if(n.onRoomInvite===void 0){await e.respond({result:`error`,code:`unsupported_verb`});return}await s(e)}(async()=>{for await(let t of e.incomingManageRequests){if(t.command.verb!==`room:member`)continue;let e=t.command.params;typeof e==`object`&&`verb`in e&&(e.verb===`room.send`?await r(t,e):e.verb===`capability.request`?await o(t):e.verb===`capability.grant`?await c(t):e.verb===`room.rekey`&&n.onRekey!==void 0&&await n.onRekey(t))}})()}function $C(){let e=new Map;return{get:async t=>Promise.resolve(e.get(t)),set:async(t,n)=>Promise.resolve(e.set(t,n)).then(()=>void 0),delete:async t=>Promise.resolve(e.delete(t)).then(()=>void 0),keys:async t=>Promise.resolve([...e.keys()].filter(e=>e.startsWith(t)))}}var ew=32,tw=256,nw=12,rw=4,iw=8,aw=new TextEncoder().encode(`wire-mesh/room-rekey/v1\0`);function ow(){return crypto.getRandomValues(new Uint8Array(ew))}function sw(e){let t=new TextEncoder().encode(e.room),n=new Uint8Array(rw);new DataView(n.buffer).setUint32(0,t.length,!1);let r=new Uint8Array(iw);new DataView(r.buffer).setBigUint64(0,BigInt(e.keyEpoch),!1);let i=new Uint8Array(aw.length+n.length+t.length+r.length),a=0;return i.set(aw,a),a+=aw.length,i.set(n,a),a+=n.length,i.set(t,a),a+=t.length,i.set(r,a),i}async function cw(e,t){let n=await crypto.subtle.importKey(`raw`,Uint8Array.from(e),`HKDF`,!1,[`deriveKey`]);return crypto.subtle.deriveKey({name:`HKDF`,hash:`SHA-256`,salt:Uint8Array.from(new Uint8Array),info:Uint8Array.from(sw(t))},n,{name:`AES-GCM`,length:tw},!1,[`encrypt`,`decrypt`])}async function lw(e,t){let n=crypto.getRandomValues(new Uint8Array(nw)),r=new Uint8Array(await crypto.subtle.encrypt({name:`AES-GCM`,iv:n},e,Uint8Array.from(t))),i=new Uint8Array(n.length+r.length);return i.set(n,0),i.set(r,n.length),i}async function uw(e,t){if(t.length<nw)throw Error(`ciphertext shorter than the AES-GCM IV it must carry`);let n=t.slice(0,nw),r=t.slice(nw);return new Uint8Array(await crypto.subtle.decrypt({name:`AES-GCM`,iv:n},e,r))}async function dw(e,t){return lw(e,t)}async function fw(e,t){return uw(e,t)}async function pw(e){return crypto.subtle.importKey(`raw`,Uint8Array.from(e),`AES-GCM`,!1,[`encrypt`,`decrypt`])}async function mw(e,t){return lw(await pw(e),t)}async function hw(e,t){return uw(await pw(e),t)}var gw=`+aes256gcm`;function _w(e){return yw(e)?e:`${e}${gw}`}function vw(e){return yw(e)?e.slice(0,e.length-10):e}function yw(e){return e.endsWith(gw)}function bw(e,t){return{verb:LC,params:{verb:`room.rekey`,"key-epoch":e,"wrapped-key":t}}}async function xw(e,t,n,r,i,a){return e.sendManageRequest(bw(n,r),{kind:`room`,path:t},i,a)}function Sw(e){return async function(t){if(t.command.verb!==`room:member`){await t.respond({result:`error`,code:`malformed`});return}let n=kv.safeParse(t.command.params);if(!n.success){await t.respond({result:`error`,code:`malformed`});return}if(t.scope.kind!==`room`||t.scope.path===void 0){await t.respond({result:`error`,code:`scope_mismatch`});return}let r=t.scope.path,i=await RC(e.ownRoomMemberToken,{identity:e.identity,clock:e.clock,revocation:e.revocation,expectedBearer:e.identity.deviceId,roomPath:r,dmRootPolicy:`either-participant`});if(!i.ok){await t.respond({result:`error`,code:i.reason});return}let a=e.identity.deriveSharedSecret;if(a===void 0){await t.respond({result:`error`,code:`ecdh_unsupported`});return}let o=n.data[`key-epoch`],s=Array.isArray(n.data[`wrapped-key`])?n.data[`wrapped-key`]:[n.data[`wrapped-key`]],c=o-s.length+1,l;try{let e=await a(i.rootIssuerKey);l=await Promise.all(s.map(async(t,n)=>fw(await cw(e,{room:r,keyEpoch:c+n}),t)))}catch{await t.respond({result:`error`,code:`unwrap_failed`});return}await t.respond({result:`ok`}),e.onRekey({room:r,keyEpoch:o,contentKeys:l})}}function Cw(e){return`data/${Dy(e)}/head`}function ww(e,t){return`data/${Dy(e)}/entry/${String(t)}`}async function Tw(e,t){let n=await e.get(Cw(t));return n===void 0?0:Number(new TextDecoder().decode(n))}async function Ew(e,t,n){await e.set(Cw(t),new TextEncoder().encode(String(n)))}async function Dw(e,t){return Tw(e,t)}async function Ow(e,t){let n=await Tw(e.storage,e.identity.deviceId)+1;return await e.storage.set(ww(e.identity.deviceId,n),t),await Ew(e.storage,e.identity.deviceId,n),{seq:n,haveFrame:{type:`data-have`,peer:e.identity.deviceId,"head-seq":n}}}async function kw(e,t,n){let r=await Tw(e,t.peer);if(r<=t[`from-seq`])return null;let i=Math.min(r,t[`from-seq`]+n),a=[];for(let n=t[`from-seq`]+1;n<=i;n+=1){let r=await e.get(ww(t.peer,n));if(r===void 0)break;a.push(r)}return a.length===0?null:{type:`data-entries`,peer:t.peer,"from-seq":t[`from-seq`],entries:a}}async function Aw(e,t){let n=await Tw(e,t.peer);if(t[`from-seq`]!==n)return{ok:!1,reason:`gap`};let r=t[`from-seq`];for(let n of t.entries)r+=1,await e.set(ww(t.peer,r),n);return await Ew(e,t.peer,r),{ok:!0}}async function jw(e,t,n){let r=await Tw(e,t),i=[];for(let a=n+1;a<=r;a+=1){let n=await e.get(ww(t,a));if(n===void 0)break;i.push(n)}return i}function Mw(e){return Uint8Array.from(e)}function Nw(e){return Mw(hc(e,Qs))}function Pw(e){return Nw({1:e.identityKey.alg,4:e.deviceId})}function Fw(e,t){return hc([`Signature1`,e,new Uint8Array,t],Qs)}function Iw(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1)if(e[n]!==t[n])return!1;return!0}async function Lw(e,t){let[n,,r,i]=e;if(r===null)return{ok:!1,reason:`malformed`};let a;try{a=rl(r,il)}catch{return{ok:!1,reason:`malformed`}}let o=Nv.safeParse(a);if(!o.success)return{ok:!1,reason:`malformed`};let s=o.data;if(t.expectedRoom!==void 0&&s.room!==t.expectedRoom)return{ok:!1,reason:`wrong_room`};if(!await t.identity.verify(s[`poster-key`],Fw(n,r),i))return{ok:!1,reason:`bad_signature`};if(!Iw(await t.identity.deriveDeviceId(s[`poster-key`][`public-key`]),s.poster))return{ok:!1,reason:`wrong_poster`};let c=s[`valid-until`];if(c!==void 0&&c<=t.clock.now())return{ok:!1,reason:`content_expired`};let l=s[`key-epoch`];if(yw(s[`content-type`])!==(l!==void 0))return{ok:!1,reason:`key_epoch_mismatch`};let u=await RC(s.token,{identity:t.identity,clock:t.clock,revocation:t.revocation,expectedBearer:s.poster,roomPath:s.room});return u.ok?{ok:!0,claims:s}:{ok:!1,reason:u.reason}}async function Rw(e){let t=Nw({room:e.room,poster:e.identity.deviceId,"poster-key":e.identity.identityKey,token:e.token,"notice-id":e.noticeId,"posted-at":e.clock.now(),"content-type":e.contentType,content:e.content,...e.refs===void 0?{}:{refs:[...e.refs]},...e.validUntil===void 0?{}:{"valid-until":e.validUntil},...e.keyEpoch===void 0?{}:{"key-epoch":e.keyEpoch}}),n=Pw(e.identity);return[n,{},t,await e.identity.sign(Fw(n,t))]}var zw=16;function Bw(e){return new Uint8Array(hc(e,Qs))}function Vw(e){let{identity:t,storage:n,clock:r,revocation:i,roomKeys:a}=e;async function o(e){let i=await a.currentEpoch(e.room);if(i===void 0)throw Error(`no content key held for room ${e.room}: room.rekey this room before posting encrypted notices`);let o=await a.get(e.room,i);if(o===void 0)throw Error(`content key store is inconsistent: epoch ${String(i)} is current for room ${e.room} but holds no key`);let s=e.noticeId??crypto.getRandomValues(new Uint8Array(zw)),c=await mw(o,e.plaintext),l=await Rw({identity:t,clock:r,room:e.room,token:e.token,noticeId:s,contentType:_w(e.contentType),content:c,keyEpoch:i}),{haveFrame:u}=await Ow({identity:t,storage:n},Bw(l));return{dataHave:u,notice:l,keyEpoch:i}}async function s(e,t){let r=await Dw(n,e);if(!(await Aw(n,{type:`data-entries`,peer:e,"from-seq":r,entries:[t]})).ok)throw Error(`gap rejecting entry for peer log (head ${String(r)})`)}async function c(e,t){let r=await jw(n,e,0),i=[];for(let e of r)i.push(await l(e,t));return i}async function l(e,n){let o=u(e);if(o===void 0)return{verified:!1,reason:`malformed`};let s=await Lw(o,{identity:t,clock:r,revocation:i,expectedRoom:n});if(!s.ok)return{verified:!1,reason:s.reason};let c=s.claims;if(!yw(c[`content-type`]))return{verified:!0,contentType:c[`content-type`],plaintext:c.content,claims:c};let l=c[`key-epoch`];if(l===void 0)return{verified:!1,reason:`key_epoch_mismatch`};let d=await a.get(c.room,l),f={verified:!0,contentType:vw(c[`content-type`]),claims:c};if(d===void 0)return f;try{let e=await hw(d,c.content);return{...f,plaintext:e}}catch{return f}}function u(e){try{let t=rl(e,il),n=Mv.safeParse(t);return n.success?n.data:void 0}catch{return}}return{postEncryptedNotice:o,ingestPeerEntry:s,readOwnNotices:async e=>c(t.deviceId,e),readPeerNotices:async(e,t)=>c(e,t)}}var Hw=32;function Uw(e){let{session:t,storage:n,identity:r,clock:i,revocation:a,roomKeys:o,onChange:s}=e,c=Vw({identity:r,storage:n,clock:i,revocation:a,roomKeys:o}),l=new Map;async function u(e){let r=await Dw(n,e);await t.sendDataFrame({type:`data-request`,peer:e,"from-seq":r})}function d(e){if(e.type===`data-have`){l.set(Dy(e.peer),e.peer),u(e.peer).catch(()=>void 0);return}if(e.type===`data-entries`){(async()=>{(await Aw(n,e)).ok&&(e.entries.length>=Hw&&await u(e.peer).catch(()=>void 0),s())})();return}e.type===`data-request`&&(async()=>{let r=await kw(n,e,Hw);r!==null&&await t.sendDataFrame(r)})().catch(()=>void 0)}return{handleFrame:d,async post(e){let{dataHave:n}=await c.postEncryptedNotice(e);await t.sendDataFrame(n),s()},async readRoom(e){let t=await c.readOwnNotices(e),n=await Promise.all([...l.values()].map(async t=>c.readPeerNotices(t,e)));return[...t,...n.flat()]},roomKeys:o}}async function Ww(e){let{session:t,identity:n,clock:r,revocation:i,ownRoomMemberToken:a,roomPath:o,roomKeys:s}=e;if(await s.currentEpoch(o)!==void 0)return;let c=o.split(`+`)[0]??``;if(c===``||Dy(n.deviceId)!==c)return;let l=await RC(a,{identity:n,clock:r,revocation:i,expectedBearer:n.deviceId,roomPath:o,dmRootPolicy:`either-participant`});if(!l.ok)throw Error(`own room token failed verification: ${l.reason}`);let u=n.deriveSharedSecret;if(u===void 0)throw Error(`this identity cannot derive ECDH shared secrets`);let d=ow(),f=await dw(await cw(await u(l.rootIssuerKey),{room:o,keyEpoch:1}),d);s.set(o,1,d),await xw(t,o,1,f)}var Gw=[`core/management`,`core/room`],Kw=16;function qw(){let e=new Uint8Array(Kw);return crypto.getRandomValues(e),e}function Jw(e){if(e?.session===void 0||e.status!==`connected`)throw Error(`conversation is not connected`);return e.session}function Yw(e,t,n){let[r,i]=(0,O.useReducer)(SC,new Map),a=Dy(e.deviceId);(0,O.useEffect)(()=>{let e=new AbortController;return(async()=>{for(let t of await n.roomPaths()){let r=await n.list(t);if(e.signal.aborted)return;i({type:`restored`,roomPath:t,participants:CC(t,a),messages:r})}})(),()=>{e.abort()}},[n,a]);let o=(0,O.useRef)(new Map),s=(0,O.useRef)(new Map);function c(n,r){let a=new Map,o={get:async(e,t)=>Promise.resolve(a.get(e)?.get(t)),set:(e,t,n)=>{let r=a.get(e)??new Map;r.set(t,n),a.set(e,r)},currentEpoch:async e=>Promise.resolve([...a.get(e)?.keys()??[]].sort((e,t)=>t-e)[0])},s={},c=()=>{let e=s.wiring;e!==void 0&&e.readRoom(r).then(e=>{i({type:`notices`,roomPath:r,notices:[...e]})})},l=Uw({session:n,storage:$C(),identity:e,clock:t,revocation:iC,roomKeys:o,onChange:()=>{c()}});return s.wiring=l,{wiring:l,roomKeys:o,refresh:c}}let l=(0,O.useCallback)(async(l,u)=>{let d={},f=await vb(l,e,Gw,{clock:t,onFrame:(e,t)=>{d.current?.(t)}}),p=u??await f.peerDeviceId,m=Dy(p),h=wb(a,m);if(r.get(h)?.status===`connected`){await f.close();return}let g=c(f,h);o.current.set(h,g),s.current.delete(h),d.current=e=>{g.wiring.handleFrame(e)},i({type:`opened`,roomPath:h,participants:[m],session:f}),i({type:`restored`,roomPath:h,participants:[m],messages:await n.list(h)}),QC(f,{identity:e,clock:t,revocation:iC,peerDevice:p,currentMembers:()=>[e.deviceId,p]},{onMessage:e=>{let t={direction:`received`,text:e.text,messageId:e.messageId,sentAt:e.sentAt};n.append(h,t),i({type:`message`,roomPath:h,message:t})},onJoinRequest:e=>{i({type:`join-request`,roomPath:h,request:{requesterHex:Dy(e.requesterDevice),async decide(t){i({type:`join-request-settled`,roomPath:h}),await e.decide(t)}}})},onRekey:async n=>{let r=s.current.get(h);if(r===void 0){await n.respond({result:`error`,code:`no_token`});return}await Sw({identity:e,clock:t,revocation:iC,ownRoomMemberToken:r,onRekey:e=>{e.contentKeys.forEach((t,n)=>{g.roomKeys.set(h,e.keyEpoch-e.contentKeys.length+1+n,t)}),g.refresh()}})(n)}}),(async()=>{for await(let e of f.events)e.state.status===`closed`&&i({type:`closed`,roomPath:h})})()},[e,t,a,r,n]),u=(0,O.useCallback)(async(a,c)=>{let l=r.get(a),u=Jw(l),d=l?.token;d===void 0&&(d=(await ZC(u,a)).token,s.current.set(a,d),i({type:`token`,roomPath:a,token:d}),Ww({session:u,identity:e,clock:t,revocation:iC,ownRoomMemberToken:d,roomPath:a,roomKeys:o.current.get(a)?.roomKeys??{get:async()=>Promise.resolve(void 0),set:()=>void 0,currentEpoch:async()=>Promise.resolve(void 0)}}).catch(()=>void 0));let f=await XC(u,a,c,d);if(f.result!==`ok`)throw Error(`send failed: ${f.code}`);let p={direction:`sent`,text:c,messageId:qw(),sentAt:t.now()};return await n.append(a,p),p},[r,t,n,e]),d=(0,O.useCallback)(async(e,t,n)=>{i({type:`outgoing`,roomPath:e,entry:{localId:t,text:n,status:`sending`}});try{let r=await u(e,n);i({type:`message`,roomPath:e,message:r}),i({type:`outgoing-removed`,roomPath:e,localId:t})}catch(r){i({type:`outgoing`,roomPath:e,entry:{localId:t,text:n,status:`failed`,error:r instanceof Error?r.message:String(r)}})}},[u]),f=(0,O.useCallback)(async(e,t)=>d(e,crypto.randomUUID(),t),[d]),p=(0,O.useCallback)(async(e,t)=>{let n=r.get(e)?.outgoing.find(e=>e.localId===t);n!==void 0&&await d(e,t,n.text)},[r,d]),m=(0,O.useCallback)((e,t)=>{i({type:`outgoing-removed`,roomPath:e,localId:t})},[]),h=(0,O.useCallback)(async(n,a)=>{let c=r.get(n),l=Jw(c),u=o.current.get(n);if(u===void 0)throw Error(`conversation ${n} has no notice board`);let d=c?.token??s.current.get(n);d===void 0&&(d=(await ZC(l,n)).token,s.current.set(n,d),i({type:`token`,roomPath:n,token:d})),await Ww({session:l,identity:e,clock:t,revocation:iC,ownRoomMemberToken:d,roomPath:n,roomKeys:u.roomKeys}),await u.wiring.post({room:n,token:d,contentType:`text/plain`,plaintext:new TextEncoder().encode(a)}),u.refresh()},[r,e,t]),g=(0,O.useCallback)(e=>{i({type:`read`,roomPath:e})},[]);return{conversations:[...r.values()],attach:l,send:f,retry:p,discard:m,postNotice:h,markRead:g}}var Xw=8787,Zw=/^(localhost|127\.\d+\.\d+\.\d+)(:\d+)?$/;function Qw(e){return Zw.test(e)}async function $w(e=Xw){try{return await fetch(`http://127.0.0.1:${String(e)}/`,{mode:`no-cors`}),`ws://127.0.0.1:${String(e)}`}catch{return}}async function eT(e=typeof location>`u`?``:location.host){return Qw(e)?Promise.resolve(void 0):$w()}var tT=`q7ltm10`,nT=`ws://localhost:8787`,rT=[`core/management`,`core/exec`,`core/data`],iT=[`core/management`,`core/data`],aT=5,oT=1e3,sT=3e4,cT=2,lT={maxAttempts:aT,delayMs:e=>Math.min(oT*cT**(e-1),sT)};function uT(e){return e.startsWith(`ws://`)||e.startsWith(`wss://`)?e:`ws://${e}`}function dT({identity:e,clock:t,messageStore:n,discoverLocalNode:r=eT,defaultAddress:i=nT}){let[a,o]=(0,O.useState)(i),[s,c]=(0,O.useState)(iT),[l,u]=(0,O.useState)([]),[d,f]=(0,O.useState)([]),[p,m]=(0,O.useState)([]),h=Yw(e,t,n),[g,_]=(0,O.useState)(),v=h.conversations.find(e=>e.roomPath===g)??h.conversations[0],{markRead:y}=h,b=v?.roomPath,x=v?.unread??0;(0,O.useEffect)(()=>{b!==void 0&&x>0&&y(b)},[b,x,y]);let S=(0,O.useRef)(h.attach);(0,O.useEffect)(()=>{S.current=h.attach},[h.attach]);let C=(0,O.useRef)(l);(0,O.useEffect)(()=>{C.current=l},[l]);let w=(0,O.useRef)(s);(0,O.useEffect)(()=>{w.current=s},[s]);function T(n,r){let i=uC(r,{identity:e,clock:t,onIncomingConnection:e=>{S.current(e)}});u(e=>[...e,{address:n,session:r,negotiator:i}])}async function ee(e){return new Promise(t=>{f(n=>[...n,{key:pC(e.device),device:e.device,addresses:e.addresses,resolve:t}])})}function E(e,t){f(n=>(n.find(t=>t.key===e)?.resolve(t),n.filter(t=>t.key!==e)))}function D(){let n={current:null},r=_b(Ab(),e,t,lT,[],e=>{n.current?.considerAdvert(e)});return n.current=bb({selfDeviceId:e.deviceId,shouldExpand:ee,dial:te,onExpanded:(e,t,n)=>{T(t,n)}}),r}async function te(e){let t=D();return t.connect(uT(e),w.current).then(()=>t)}function k(e){if(C.current.some(t=>t.address===e))return;let t=D();T(e,t),t.connect(e,s).catch(()=>{})}let ne=(0,O.useRef)(k);(0,O.useEffect)(()=>{ne.current=k});let re=(0,O.useRef)(r);(0,O.useEffect)(()=>{re.current=r},[r]);let ie=(0,O.useRef)(!1);(0,O.useEffect)(()=>{ie.current||(ie.current=!0,re.current().then(e=>{e!==void 0&&ne.current(e)}))},[]);function ae(e){e.preventDefault(),k(a)}function A(e){e.session.close(),u(t=>t.filter(t=>t.session!==e.session))}function j(t,n){t.initiate(n).then(async t=>{await h.attach(t,n),_(wb(Dy(e.deviceId),Dy(n)))}).catch(e=>{m(t=>[...t,{key:crypto.randomUUID(),peer:pC(n),reason:e instanceof Error?e.message:String(e)}])})}return(0,M.jsxs)(Za,{className:tT,p:`md`,gap:`lg`,children:[(0,M.jsx)(Co,{order:1,children:`wire-mesh console`}),(0,M.jsxs)(`form`,{onSubmit:ae,children:[(0,M.jsxs)(mi,{align:`flex-end`,wrap:`wrap`,children:[(0,M.jsx)(_o,{label:`Node`,value:a,onChange:e=>{o(e.currentTarget.value)},required:!0,style:{flex:1,minWidth:`16rem`}}),(0,M.jsx)(ka,{type:`submit`,children:`Connect`})]}),(0,M.jsx)(_a.Group,{label:`Domains offered`,value:s,onChange:c,children:(0,M.jsx)(mi,{mt:`xs`,children:rT.map(e=>(0,M.jsx)(_a,{value:e,label:e},e))})})]}),(0,M.jsx)(vC,{peers:d,onConnect:e=>{E(e,!0)},onDismiss:e=>{E(e,!1)}}),l.map(e=>(0,M.jsx)(_C,{address:e.address,session:e.session,onClose:()=>{A(e)},onMessagePeer:t=>{j(e.negotiator,t)}},e.address)),p.map(e=>(0,M.jsx)(Wi,{color:`red`,title:`Could not message ${e.peer}`,withCloseButton:!0,onClose:()=>{m(t=>t.filter(t=>t.key!==e.key))},children:e.reason},e.key)),(0,M.jsx)(EC,{conversations:h.conversations,selected:v?.roomPath,onSelect:_}),v!==void 0&&(0,M.jsx)(IC,{view:v,onSend:async e=>h.send(v.roomPath,e),onPostNotice:async e=>h.postNotice(v.roomPath,e),onRetry:e=>{h.retry(v.roomPath,e)},onDiscard:e=>{h.discard(v.roomPath,e)}},v.roomPath)]})}var fT=`modulepreload`,pT=function(e){return`/`+e},mT={},hT=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=pT(t,n),t=s(t),t in mT)return;mT[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:fT,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},gT=`false`,_T=`false`,vT=gT===`true`,yT=_T===`true`;function bT(e={}){let{immediate:t=!1,onNeedReload:n,onNeedRefresh:r,onOfflineReady:i,onRegistered:a,onRegisteredSW:o,onRegisterError:s}=e,c,l,u,d=async(e=!0)=>{await l,vT||u?.()};async function f(){if(`serviceWorker`in navigator){if(c=await hT(async()=>{let{Workbox:e}=await import(`./workbox-window.prod.es5-Bd17z0YL.js`);return{Workbox:e}},[]).then(({Workbox:e})=>new e(`/sw.js`,{scope:`/`,type:`classic`})).catch(e=>{s?.(e)}),!c)return;if(u=()=>{c?.messageSkipWaiting()},!yT){if(vT)c.addEventListener(`activated`,e=>{(e.isUpdate||e.isExternal)&&(n?n():window.location.reload())}),c.addEventListener(`installed`,e=>{e.isUpdate||i?.()});else{let e=!1,t=()=>{e=!0,c?.addEventListener(`controlling`,e=>{e.isUpdate&&(n?n():window.location.reload())}),r?.()};c.addEventListener(`installed`,n=>{n.isUpdate===void 0?n.isExternal===void 0?!e&&i?.():n.isExternal?t():!e&&i?.():n.isUpdate||i?.()}),c.addEventListener(`waiting`,t)}}c.register({immediate:t}).then(e=>{o?o(`/sw.js`,e):a?.(e)}).catch(e=>{s?.(e)})}}return l=f(),d}function xT(e={}){let{immediate:t=!0,onNeedReload:n,onNeedRefresh:r,onOfflineReady:i,onRegistered:a,onRegisteredSW:o,onRegisterError:s}=e,[c,l]=(0,O.useState)(!1),[u,d]=(0,O.useState)(!1),[f]=(0,O.useState)(()=>bT({immediate:t,onNeedReload:n,onOfflineReady(){d(!0),i?.()},onNeedRefresh(){l(!0),r?.()},onRegistered:a,onRegisteredSW:o,onRegisterError:s}));return{needRefresh:[c,l],offlineReady:[u,d],updateServiceWorker:f}}function ST(){let{offlineReady:[e,t],needRefresh:[n,r],updateServiceWorker:i}=xT();function a(){t(!1),r(!1)}return!e&&!n?null:(0,M.jsx)(qa,{onClose:a,closeButtonProps:{"aria-label":`Dismiss`},title:n?`Update available`:`Ready to work offline`,pos:`fixed`,bottom:`1rem`,right:`1rem`,style:{zIndex:1e3},children:(0,M.jsx)(mi,{gap:`xs`,children:n?(0,M.jsx)(ka,{size:`xs`,onClick:()=>{i(!0)},children:`Reload`}):void 0})})}var CT=`ws://localhost:8787`;function wT(e){return`${e.protocol===`https:`?`wss:`:`ws:`}//${e.host}`}function TT(e,t){return e?CT:wT(t)}var ET=await vl(await No()),DT={now:()=>Date.now()},OT=Py(await No()),kT=TT(!1,window.location),AT=document.getElementById(`root`);if(AT===null)throw Error(`missing #root element`);(0,wo.createRoot)(AT).render((0,M.jsx)(O.StrictMode,{children:(0,M.jsxs)(Vt,{children:[(0,M.jsx)(dT,{identity:ET,clock:DT,messageStore:OT,defaultAddress:kT}),(0,M.jsx)(ST,{})]})}));
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
<meta name="theme-color" content="#1971c2" />
|
|
11
11
|
<link rel="icon" type="image/svg+xml" href="./favicon.svg" />
|
|
12
12
|
<title>wire-mesh console</title>
|
|
13
|
-
<script type="module" crossorigin src="/assets/index-
|
|
13
|
+
<script type="module" crossorigin src="/assets/index-CaSPs6Q7.js"></script>
|
|
14
14
|
<link rel="stylesheet" crossorigin href="/assets/index-BMlnc-0m.css">
|
|
15
15
|
<link rel="manifest" href="/manifest.webmanifest"></head>
|
|
16
16
|
<body>
|
package/dist/web-console/sw.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
if(!self.define){let e,s={};const i=(i,n)=>(i=new URL(i+".js",n).href,s[i]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=i,e.onload=s,document.head.appendChild(e)}else e=i,importScripts(i),s()}).then(()=>{let e=s[i];if(!e)throw new Error(`Module ${i} didn’t register its module`);return e}));self.define=(n,o)=>{const r=e||("document"in self?document.currentScript.src:"")||location.href;if(s[r])return;let t={};const
|
|
1
|
+
if(!self.define){let e,s={};const i=(i,n)=>(i=new URL(i+".js",n).href,s[i]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=i,e.onload=s,document.head.appendChild(e)}else e=i,importScripts(i),s()}).then(()=>{let e=s[i];if(!e)throw new Error(`Module ${i} didn’t register its module`);return e}));self.define=(n,o)=>{const r=e||("document"in self?document.currentScript.src:"")||location.href;if(s[r])return;let t={};const d=e=>i(e,r),l={module:{uri:r},exports:t,require:d};s[r]=Promise.all(n.map(e=>l[e]||d(e))).then(e=>(o(...e),t))}}define(["./workbox-2fbc6a65"],function(e){"use strict";self.addEventListener("message",e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()}),e.precacheAndRoute([{url:"index.html",revision:"ce26ad1de19e6b002f6db62e6440433f"},{url:"assets/workbox-window.prod.es5-Bd17z0YL.js",revision:null},{url:"assets/index-CaSPs6Q7.js",revision:null},{url:"assets/index-BMlnc-0m.css",revision:null},{url:"favicon.svg",revision:"e9eabed03a72f0df2b347884322f7dfb"},{url:"icons/icon-192x192.svg",revision:"e9eabed03a72f0df2b347884322f7dfb"},{url:"icons/icon-512x512.svg",revision:"e9eabed03a72f0df2b347884322f7dfb"},{url:"manifest.webmanifest",revision:"89b97e994ecf3ebc89bc570153e191ad"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))});
|
package/package.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wire-mesh",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.4",
|
|
4
4
|
"bin": {
|
|
5
5
|
"wire-mesh": "./dist/server.mjs"
|
|
6
6
|
},
|
|
7
7
|
"dependencies": {
|
|
8
8
|
"cbor2": "2.3.0",
|
|
9
|
-
"wire-mesh-core": "2.0.
|
|
9
|
+
"wire-mesh-core": "2.0.2",
|
|
10
10
|
"ws": "8.21.3"
|
|
11
11
|
},
|
|
12
12
|
"devDependencies": {
|
|
13
13
|
"@arethetypeswrong/cli": "0.18.5",
|
|
14
14
|
"@exadev/eslint-config": "2.18.0",
|
|
15
|
-
"@exadev/wire-mesh-web-console": "2.
|
|
15
|
+
"@exadev/wire-mesh-web-console": "2.3.0",
|
|
16
16
|
"@types/node": "26.4.1",
|
|
17
17
|
"@types/ws": "8.18.1",
|
|
18
18
|
"eslint": "10.10.0",
|