@mblaney/holster 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,33 @@
1
+ # This workflow will run tests using node and then publish a package to GitHub Packages when a release is created
2
+ # For more information see: https://docs.github.com/en/actions/publishing-packages/publishing-nodejs-packages
3
+
4
+ name: Node.js Package
5
+
6
+ on:
7
+ release:
8
+ types: [created]
9
+
10
+ jobs:
11
+ build:
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+ - uses: actions/setup-node@v4
16
+ with:
17
+ node-version: 20
18
+ - run: npm ci
19
+ - run: npm test
20
+
21
+ publish-npm:
22
+ needs: build
23
+ runs-on: ubuntu-latest
24
+ steps:
25
+ - uses: actions/checkout@v4
26
+ - uses: actions/setup-node@v4
27
+ with:
28
+ node-version: 20
29
+ registry-url: https://registry.npmjs.org/
30
+ - run: npm ci
31
+ - run: npm publish
32
+ env:
33
+ NODE_AUTH_TOKEN: ${{secrets.npm_token}}
package/build/holster.js CHANGED
@@ -1,4 +1,4 @@
1
- var X={is:e=>!(e instanceof Array)&&(e-parseFloat(e)+1>=0||e===1/0||e===-1/0)},_={is:e=>e?e instanceof Object&&e.constructor===Object||Object.prototype.toString.call(e).match(/^\[object (\w+)\]$/)[1]==="Object":!1,map:(e,t,o)=>{var r=Object.keys(e);for(let n=0;n<r.length;n++){let u=t(e[r[n]],r[n],o);if(typeof u<"u")return u}},put:(e,t,o)=>(e||(e={}),e[t]=o,e),del:(e,t)=>{if(e)return e[t]=null,delete e[t],e}},ve=(e,t,o)=>{if(o.id){o.id=!1;return}if(t==="#"&&typeof e=="string"){o.id=e;return}o.id=!1},T={is:e=>{if(e&&e["#"]&&!e._&&_.is(e)){let t={};if(_.map(e,ve,t),t.id)return t.id}return!1},ify:e=>_.put({},"#",e)},J="_holster_user_public_key",W=(e,t,o,r)=>{let n={[e]:{_:{"#":e,">":{},s:o,p:r}}};for(let[u,l]of Object.entries(t))n[e][u]=l,n[e]._[">"][u]=Date.now();return r&&(n[e][J]=r,n[e]._[">"][J]=Date.now()),n},z=(e,t)=>{if(typeof t>"u")return e===null;if(typeof e>"u")return!0;if(typeof e=="string")return e===t;if(!_.is(e)||!t)return!1;let o=e["*"];if(o)return t.slice(0,o.length)===o;let r=e[">"],n=e["<"];return r&&n?t>=r&&t<=n:r?t>=r:n?t<=n:!1},E={random:e=>{var t="";let o="0123456789ABCDEFGHIJKLMNOPQRSTUVWXZabcdefghijklmnopqrstuvwxyz";e||(e=24);for(let r=0;r<e;r++)t+=o.charAt(Math.floor(Math.random()*o.length));return t}};var Se=e=>{e||(e=9e3);let t={store:{}};return t.check=o=>t.store[o]?t.track(o):!1,t.track=o=>(t.store[o]=Date.now(),t.expiry||(t.expiry=setTimeout(()=>{let r=Date.now();Object.keys(t.store).forEach(n=>{r-t.store[n]>e&&delete t.store[n]}),t.expiry=null},e)),o),t},le=Se;var ke=(e,t)=>{let o=e["#"],r=typeof e["."]=="string"?e["."]:!1;var n=t[o];if(!n||!r)return;let u=n[r];if(u)return n={_:n._,[r]:u},n._[">"]={[r]:n._[">"][r]},{[o]:n}},ne=ke;typeof btoa>"u"&&(globalThis.btoa=e=>Buffer.from(e,"binary").toString("base64"),globalThis.atob=e=>Buffer.from(e,"base64").toString("binary"));function Z(){}Object.assign(Z,{from:Array.from});Z.prototype=Object.create(Array.prototype);Z.prototype.toString=function(e,t,o){e||(e="utf8"),t||(t=0);let r=this.length;if(e==="hex"){let n=new Uint8Array(this);return[...Array((o&&o+1||r)-t).keys()].map(u=>n[u+t].toString(16).padStart(2,"0")).join("")}if(e==="utf8")return Array.from({length:(o||r)-t},(n,u)=>String.fromCharCode(this[u+t])).join("");if(e==="base64")return btoa(this)};var M=Z;function I(...e){return console.warn("new SafeBuffer() is deprecated, please use SafeBuffer.from()"),I.from(...e)}I.prototype=Object.create(Array.prototype);Object.assign(I,{from(){if(!Object.keys(arguments).length||arguments[0]==null)throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.");let e=arguments[0],t;if(typeof e=="string"){let r=arguments[1]||"utf8";if(r==="hex"){let n=e.match(/([\da-fA-F]{2})/g).map(u=>parseInt(u,16));if(!n||!n.length)throw new TypeError("Invalid first argument for type 'hex'.");t=M.from(n)}else if(r==="utf8"||r==="binary"){let n=e.length,u=new Uint16Array(n);Array.from({length:n},(l,s)=>u[s]=e.charCodeAt(s)),t=M.from(u)}else if(r==="base64"){let n=atob(e),u=n.length,l=new Uint8Array(u);Array.from({length:u},(s,i)=>l[i]=n.charCodeAt(i)),t=M.from(l)}else console.info("SafeBuffer.from unknown encoding: "+r);return t}if(e.byteLength?e.byteLength:e.length){let r;return e instanceof ArrayBuffer&&(r=new Uint8Array(e)),M.from(r||e)}},alloc(e,t=0){return M.from(new Uint8Array(Array.from({length:e},()=>t)))},concat(e){if(!Array.isArray(e))throw new TypeError("First argument must be Array containing ArrayBuffer or Uint8Array instances.");return M.from(e.reduce((t,o)=>t.concat(Array.from(o)),[]))}});I.prototype.from=I.from;I.prototype.toString=M.prototype.toString;var N=I;var je=typeof document>"u",fe=je?(await import("node:crypto")).webcrypto:globalThis.crypto,$=fe.subtle,Y=e=>typeof e=="string"?e:JSON.stringify(e),L=e=>{try{return JSON.parse(e)}catch{return e}},V=e=>{let t=new Uint8Array(N.alloc(e));return N.from(fe.getRandomValues(t))},q=(e,t)=>{let[o,r]=e.split(".");return{kty:"EC",crv:"P-256",x:o,y:r,d:t,ext:!0,key_ops:t?["sign"]:["verify"]}},ee=async e=>{let t=await $.digest({name:"SHA-256"},new TextEncoder().encode(Y(e)));return N.from(t)},ie=async(e,t)=>{let o=e+t.toString("utf8"),r=N.from(await ee(o),"binary"),n=xe(r);return await $.importKey("jwk",n,{name:"AES-GCM"},!1,["encrypt","decrypt"])},xe=e=>({kty:"oct",k:e.toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/\=/g,""),ext:!1,alg:"A256GCM"});var _e={pair:async e=>{let t=await $.generateKey({name:"ECDSA",namedCurve:"P-256"},!0,["sign","verify"]).then(async n=>{let u=await $.exportKey("jwk",n.publicKey);return{priv:(await $.exportKey("jwk",n.privateKey)).d,pub:u.x+"."+u.y}}),o=await $.generateKey({name:"ECDH",namedCurve:"P-256"},!0,["deriveKey"]).then(async n=>{let u=await $.exportKey("jwk",n.publicKey);return{epriv:(await $.exportKey("jwk",n.privateKey)).d,epub:u.x+"."+u.y}}),r={pub:t.pub,priv:t.priv,epub:o.epub,epriv:o.epriv};return e&&e(r),r},encrypt:async(e,t,o)=>{if(!t||!t.epriv)return o&&o(null),null;let r={s:V(9),iv:V(15)},n=await ie(t.epriv,r.s).then(l=>$.encrypt({name:"AES-GCM",iv:new Uint8Array(r.iv)},l,new TextEncoder().encode(Y(e)))),u={ct:N.from(n,"binary").toString("base64"),iv:r.iv.toString("base64"),s:r.s.toString("base64")};return o&&o(u),u},decrypt:async(e,t,o)=>{if(!e||!e.ct||!e.iv||!e.s||!t||!t.epriv)return o&&o(null),null;let r={ct:N.from(e.ct,"base64"),iv:N.from(e.iv,"base64"),s:N.from(e.s,"base64")};try{let n=await ie(t.epriv,r.s).then(l=>$.decrypt({name:"AES-GCM",iv:new Uint8Array(r.iv),tagLength:128},l,new Uint8Array(r.ct))),u=L(new TextDecoder("utf8").decode(n));return o&&o(u),u}catch{return o&&o(null),null}},verify:async(e,t,o)=>{if(!t||!t.pub)return o&&o(null),null;let r=L(e),n=await $.importKey("jwk",q(t.pub),{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]),u={};if(typeof r.m=="string")u=r.m;else for(let a of Object.keys(r.m))a!=="_"&&a!=J&&(u[a]=r.m[a]);let l=await ee(u),s=new Uint8Array(N.from(r.s,"base64")),i={name:"ECDSA",hash:{name:"SHA-256"}};if(await $.verify(i,n,s,new Uint8Array(l))){let a=L(r.m);return o&&o(a),a}return o&&o(null),null},sign:async(e,t,o)=>{if(!t||!t.pub||!t.priv)return o&&o(null),null;let r=L(e),n=await ee(r),u=q(t.pub,t.priv),l={name:"ECDSA",namedCurve:"P-256"},s=await $.importKey("jwk",u,l,!1,["sign"]).then(a=>$.sign({name:"ECDSA",hash:{name:"SHA-256"}},a,new Uint8Array(n))),i={m:r,s:N.from(s,"binary").toString("base64")};return o&&o(i),i},work:async(e,t,o)=>{typeof t=="function"&&(o=t,t=void 0),typeof t>"u"&&(t=V(9));let r=await $.importKey("raw",new TextEncoder().encode(Y(e)),{name:"PBKDF2"},!1,["deriveBits"]),n={name:"PBKDF2",iterations:1e5,salt:new TextEncoder().encode(t),hash:{name:"SHA-256"}},u=await $.deriveBits(n,r,512),l={epriv:N.from(u,"binary").toString("base64")};return o&&o(l),l},secret:async(e,t,o)=>{if(!e||!e.epub||!t||!t.epub||!t.epriv)return o&&o(null),null;let r={name:"ECDH",namedCurve:"P-256"},n=q(e.epub),u=await $.importKey("jwk",n,r,!0,[]),l=q(t.epub,t.epriv,!1);delete l.key_ops;let s=await $.importKey("jwk",l,r,!1,["deriveBits"]).then(async i=>{let a=await $.deriveBits({public:u,name:"ECDH",namedCurve:"P-256"},i,256),h=await $.importKey("raw",new Uint8Array(a),{name:"AES-GCM",length:256},!0,["encrypt","decrypt"]);return $.exportKey("jwk",h).then(({k:y})=>y)});return o&&o({epriv:s}),{epriv:s}}},K=_e;var oe=(e,t,o,r)=>e<t?{historical:!0}:e>t?{incoming:!0}:(typeof o!="string"&&(o=JSON.stringify(o)||""),typeof r!="string"&&(r=JSON.stringify(r)||""),o===r?{state:!0}:o<r?{current:!0}:{incoming:!0});oe.mix=async(e,t,o,r)=>{var n=Date.now(),u={},l={};let s=0;for(let i of Object.keys(e)){let a=e[i],h=!1,y=!1,b=0,d="",c=o;if(!(!a||!a._)){if(a._.s&&a._.p&&(c=!0),i.length>1&&i[0]==="~")if(i[1]==="@")y=!0,c=!1;else{if(a._.p&&i!="~"+a._.p){console.log(`error public key does not match for soul: ${i}`);continue}a._.p=i.slice(1),c=!0}if(c){if(!a._.s||!a._.p){console.log("error signature and public key required to verify data");continue}if(!await K.verify({m:a,s:a._.s},{pub:a._.p})){console.log(`error could not verify soul: ${i}`);continue}}for(let f of Object.keys(a)){if(f==="_")continue;let p=a[f],g=a._[">"][f],w=(t[i]||{})[f],v=(t[i]||{_:{">":{}}})._[">"][f]||0;if(y&&f!==T.is(p))continue;let m=g-n;if(m>0){if(m>864e5)continue;(s===0||m<s)&&(s=b=m),l[i]||(l[i]={_:{"#":i,">":{},s:a._.s,p:a._.p}}),l[i][f]=p,l[i]._[">"][f]=g}else oe(g,v,p,w).incoming&&(u[i]||(u[i]={_:{"#":i,">":{},s:a._.s,p:a._.p}}),t[i]||(t[i]={_:{"#":i,">":{},s:a._.s,p:a._.p}}),t[i][f]=u[i][f]=p,t[i]._[">"][f]=u[i]._[">"][f]=g,r[i]&&setTimeout(()=>{r[i]&&r[i].filter(S=>z(S["."],f)).forEach(S=>S.cb())},100),h=!0)}c&&b!==0&&u[i]&&(Object.assign(l[i],u[i]),delete u[i]),h&&r[i]&&setTimeout(()=>{r[i]&&r[i].filter(f=>z(f["."])).forEach(f=>f.cb())},100)}}return{now:u,defer:l,wait:s}};var se=oe;var U="",G="",ae=()=>{let e=(t,o,r)=>{if(r||(e[U]||(e[U]={}),r=e[U]),!t)return r;let n=0,u={},l=t[n],s=t.length-1,i=typeof o>"u",a=r[l];for(;!a&&n<s;)l+=t[++n],a=r[l];if(a)if(n===s){if(i)return typeof a[G]>"u"?a[U]:a[G];a[G]=o}else return!a[U]&&!i&&(a[U]={}),e(t.slice(++n),o,a[U]);else if(_.map(r,(y,b)=>{let d=0,c="";for(;b[d]===t[d];)c+=b[d++];if(c){if(i)return d<=s?void 0:(u[b.slice(d)]=y,y);let f={[b.slice(d)]:y,[t.slice(d)]:{[G]:o}};return r[c]={[U]:f},delete r[b],!0}})){if(i)return u}else{if(i)return;r[l]||(r[l]={}),r[l][G]=o}};return e};ae.map=function e(t,o,r,n){n||(n=[]);var u=t[U]||t,l=Object.keys(u).sort(),s;for(let i=0;i<l.length;i++){let a=l[i],h=u[a],y=h[G];if(typeof y<"u"){if(y=o(y,n.join("")+a,a,n),typeof y<"u")return y}else r&&o(s,n.join(""),a,n);if(h[U]){if(n.push(a),y=e(h[U],o,r,n),typeof y<"u")return y;n.pop()}}};var B=ae;var pe="",ce="",O="",R=e=>{var t,o=null;if(e||(e={}),e.log||(e.log=console.log),e.batch||(e.batch=10*1e3),e.write||(e.write=1),e.size||(e.size=1024*1024),!e.store){e.log("Radisk needs `store` interface with `{get: fn, put: fn, list: fn}`");return}if(!e.store.get){e.log("Radisk needs `store.get` interface with `(file, cb)`");return}if(!e.store.put){e.log("Radisk needs `store.put` interface with `(file, data, cb)`");return}if(!e.store.list){e.log("Radisk needs a streaming `store.list` interface with `(cb)`");return}let r=(n,u,l)=>{if(n=""+n,typeof u=="function")return l=u,u=r.batch(n),typeof u<"u"||r.thrash.at&&(u=r.thrash.at(n),typeof u<"u")?l(t,u):r.read(n,l);if(r.batch(n,u),l&&r.batch.acks.push(l),++r.batch.ed>=e.batch)return r.thrash();clearTimeout(r.batch.timeout),r.batch.timeout=setTimeout(r.thrash,e.write)};return r.batch=B(),r.batch.acks=[],r.batch.ed=0,r.thrash=()=>{if(r.thrash.ing)return r.thrash.more=!0;clearTimeout(r.batch.timeout),r.thrash.more=!1,r.thrash.ing=!0;var n=r.thrash.at=r.batch;r.batch=null,r.batch=B(),r.batch.acks=[],r.batch.ed=0;let u=0;r.save(n,l=>{++u>1||(l&&e.log(l),n.acks.forEach(s=>s(l)),r.thrash.at=null,r.thrash.ing=!1,r.thrash.more&&r.thrash())})},r.save=(n,u)=>{let l={find:(s,i)=>{if(!(i<l.start))return l.start=i,e.store.list(l.lex),!0},lex:s=>{if(!s||s>l.start)return l.end=s,l.mix(l.file||"!",l.start,l.end),!0;l.file=s},mix:(s,i,a)=>{l.start=l.end=l.file=t,r.parse(s,(h,y)=>{if(h)return u(h);B.map(n,(b,d)=>{if(!(d<i)){if(a&&a<d)return l.start=d,l.start;y(d,b)}}),r.write(s,y,l.next)})},next:s=>{if(s)return u(s);if(l.start)return B.map(n,l.find);u(s)}};B.map(n,l.find)},r.write=(n,u,l)=>{o=null;let s={text:"",count:0,file:n,each:(i,a,h,y)=>{s.count++;var b=R.encode(y.length)+"#"+R.encode(h)+(typeof i>"u"?"":"="+R.encode(i))+`
2
- `;if(s.count>1&&s.text.length+b.length>e.size)return s.text="",s.limit=Math.ceil(s.count/2),s.count=0,s.sub=B(),B.map(u,s.slice),!0;s.text+=b},put:()=>{e.store.put(n,s.text,l)},slice:(i,a)=>{if(!(a<s.file)){if(++s.count>s.limit){var h=s.file;let y=a.indexOf(ce);return y===-1?s.file=a:s.file=a.substring(0,y),s.sub(s.file,null),s.count=0,r.write(h,s.sub,s.next),!0}s.sub(a,i)}},next:i=>{if(i)return l(i);s.sub=B(),B.map(u,s.slice)||r.write(s.file,s.sub,l)}};B.map(u,s.each,!0)||s.put()},r.read=(n,u)=>{if(o){let a=o(n);if(typeof a<"u")return u(t,a)}let l=n,s=n.indexOf(ce);s!==-1&&(l=n.substring(0,s));let i={lex:a=>{if(!a){if(!i.file){u("no file found",t);return}r.parse(i.file,i.it);return}a>l||a<i.file||(i.file=a)},it:(a,h)=>{a&&e.log(a),h&&(o=h,i.value=h(n)),u(a,i.value)}};e.store.list(i.lex)},r.parse=(n,u)=>{let l={disk:B(),read:(s,i)=>{if(s)return u(s);if(!i)return u(t,l.disk);let a=[],h=l.split(i);for(;h;){let y,b,d=h[1];h=l.split(h[2])||"",h[0]==="#"&&(y=h[1],a=a.slice(0,d),d<=a.length&&a.push(y)),h=l.split(h[2])||"",h[0]!==`
3
- `&&(h[0]==="="&&(b=h[1]),typeof y<"u"&&typeof b<"u"&&l.disk(a.join(""),b),h=l.split(h[2]))}u(t,l.disk)},split:s=>{if(!s)return;let i=-1,a="",h=null;for(;(h=s[++i])&&h!==O;)a+=h;let y={};if(h)return[a,R.decode(s.slice(i),y),s.slice(i+y.i)]}};e.store.get(n,l.read)},r};R.encode=e=>{let t="";if(e instanceof Array&&e.length===2&&(t=pe+e[1],e=e[0]),typeof e=="string"){let r=0,n=null,u=O;for(;n=e[r++];)n===O&&(u+=O);return u+'"'+e+t+O}let o=T.is(e);if(o)return O+"#"+o+t+O;if(X.is(e))return O+"+"+(e||0)+t+O;if(e===!0)return O+"+"+t+O;if(e===!1)return O+"-"+t+O;if(e===null)return O+" "+t+O};R.decode=(e,t)=>{var o="",r=-1,n=0,u=null,l=null;if(e[0]!==O)return;for(;u=e[++r];)if(l){if(u===O&&--n<=0)break;o+=u}else u===O?n++:l=u||!0;t&&(t.i=r+1);let[s,i]=o.split(pe);if(i){if(i=parseFloat(i),l==='"')return[s,i];if(l==="#")return[T.ify(s),i];if(l==="+")return s.length===0?[!0,i]:[parseFloat(s),i];if(l==="-")return[!1,i];if(l===" ")return[null,i]}else{if(l==='"')return o;if(l==="#")return T.ify(o);if(l==="+")return o.length===0?!0:parseFloat(o);if(l==="-")return!1;if(l===" ")return null}};var de=R;var he=typeof document>"u",F=he?await import("node:fs"):void 0,ge="",te="",ue=te+"+0"+te+"#"+te+'"root'+te,Ae=e=>{let t=e.file;if(he)return F.existsSync(t)||F.mkdirSync(t),F.existsSync(t+"/!")||F.writeFileSync(t+"/!",ue),{get:(o,r)=>{F.readFile(t+"/"+o,(n,u)=>{if(n){if(n.code==="ENOENT"){r();return}console.log("fs.readFile error:",n)}u&&(u=u.toString()),r(n,u)})},put:(o,r,n)=>{var u=Math.random().toString(36).slice(-9),l=o+"."+u+".tmp";F.writeFile(l,r,s=>{if(s){n(s);return}F.rename(l,t+"/"+o,n)})},list:o=>{F.readdir(t,(r,n)=>{n.forEach(o),o()})}};if(e.indexedDB){let o,r=indexedDB.open(t,1);return r.onupgradeneeded=n=>{n.target.result.createObjectStore(t)},r.onerror=n=>{console.log(n)},r.onsuccess=()=>{if(o=r.result,o){let u=o.transaction([t],"readonly").objectStore(t).getKey("!");u.onerror=()=>{console.log(`error getting key ${t}/!`)},u.onsuccess=()=>{if(!u.result){let s=o.transaction([t],"readwrite").objectStore(t).put(ue,"!");s.onerror=()=>{console.log(`error putting root on ${t}/!`)}}}}else console.log("error indexedDB not available")},{get:(n,u)=>{if(o){let s=o.transaction([t],"readonly").objectStore(t).get(n);s.onerror=()=>{console.log(`error getting ${t}/${n}`)},s.onsuccess=()=>{u(null,s.result)}}else u("error indexedDB not available")},put:(n,u,l)=>{if(o){let i=o.transaction([t],"readwrite").objectStore(t).put(u,n);i.onerror=()=>{console.log(`error putting data on ${t}/${n}`)},i.onsuccess=()=>{l(null)}}else l("error indexedDB not available")},list:n=>{if(o){let l=o.transaction([t],"readonly").objectStore(t).getAllKeys();l.onerror=()=>console.log("error getting keys for",t),l.onsuccess=()=>{l.result.forEach(n),n()}}else console.log("error indexedDB not available"),n()}}}return{get:(o,r)=>{r(null,ue)},put:(o,r,n)=>{n(null)},list:o=>{o("!"),o()}}},Oe=e=>{_.is(e)||(e={}),e.file=String(e.file||"radata"),e.store||(e.store=Ae(e));let t=de(e);return{get:(o,r)=>{if(!o){r("lex required");return}var n=o["#"],u=typeof o["."]=="string"?o["."]:"",l;let s=(i,a)=>{z(o["."],a)&&(l||(l={_:{"#":n,">":{}}}),l[a]=i[0],l._[">"][a]=i[1])};t(n+ge+u,(i,a)=>{let h;_.is(a)?(B.map(a,s),l||s(a,u),h={[n]:l}):a&&(s(a,u),h={[n]:l}),r(i,h)})},put:(o,r)=>{if(!o){r("graph required");return}var n=0;let u=l=>{if(n--,!u.err){if(u.err=l,u.err){r(u.err);return}n===0&&r(null)}};Object.keys(o).forEach(l=>{var s=o[l];Object.keys(s).forEach(i=>{if(i==="_")return;n++;let a=s[i],h=s._[">"][i];t(l+ge+i,[a,h],u)})})}}},ye=Oe;var me=typeof document>"u",we=me?await import("ws"):void 0;typeof globalThis.WebSocket>"u"&&(globalThis.WebSocket=we?.WebSocket);var Ce=e=>{_.is(e)||(e={});let t=le(e.maxAge),o=ye(e),r={},n={},u={},l=async(c,f,p)=>{for(let g of Object.keys(c)){let w=await new Promise(S=>{a({"#":g},S,f)});if(w.err)return p&&p(w.err),!1;let v=c[g],m=v._?v._.p:void 0,k=J;if(!(!w.put||!w.put[g]||w.put[g][k]===m))return p&&p(`error in wire check public key does not match for soul: ${g}`),!1}return!0},s=(c,f)=>{let p=ne(c.get,r);p?f(JSON.stringify({"#":t.track(E.random(9)),"@":c["#"],put:p})):o.get(c.get,(g,w)=>{f(JSON.stringify({"#":t.track(E.random(9)),"@":c["#"],put:w,err:g}))})},i=async(c,f)=>{let p=await se.mix(c.put,r,e.secure,u);if(Object.keys(p.now).length){if(!await l(p.now,f))return;o.put(p.now,g=>{f(JSON.stringify({"#":t.track(E.random(9)),"@":c["#"],err:g}))})}Object.keys(p.defer).length&&setTimeout(()=>i({put:p.defer},f),p.wait)},a=(c,f,p,g)=>{if(!f)return;_.is(g)||(g={});let w=ne(c,r);if(w){f({put:w});return}o.get(c,(v,m)=>{if(m){f({put:m,err:v});return}v&&console.log(v);let k=E.random(9);n[k]=f,p(JSON.stringify({"#":t.track(k),get:c})),setTimeout(()=>{let S=n[k];if(S){let j=c["#"],A={[j]:null};typeof c["."]=="string"&&(A[j]={[c["."]]:null}),S({put:A}),delete n[k]}},g.wait||100)})},h=c=>({get:(f,p,g)=>{a(f,p,c,g)},put:async(f,p)=>{let g=await se.mix(f,r,e.secure,u);Object.keys(g.now).length===0||!await l(g.now,c,p)||(o.put(g.now,p),c(JSON.stringify({"#":t.track(E.random(9)),put:f})))},on:(f,p)=>{let g=f&&f["#"];!g||!p||(u[g]?u[g].push({".":f["."],cb:p}):u[g]=[{".":f["."],cb:p}])},off:(f,p)=>{let g=f&&f["#"];if(!(!g||!u[g]))if(p){let w=u[g].find(v=>v.cb===p);w&&u[g].splice(u[g].indexOf(w),1)}else delete u[g]}});if(me){let c=e.wss,f=()=>c.clients();c||(c=new we.WebSocketServer({port:8080}),f=()=>c.clients);let p=(g,w)=>{f().forEach(v=>{v.readyState===WebSocket.OPEN&&v.send(g,{binary:w})})};return c.on("connection",g=>{g.on("error",console.error),g.on("message",(w,v)=>{let m=JSON.parse(w);if(t.check(m["#"]))return;t.track(m["#"]),m.get&&s(m,p),m.put&&i(m,p),p(w,v);let k=m["@"],S=n[k];S&&(delete m["#"],delete m["@"],S(m),delete n[k])})}),h(p)}let y=new WebSocket("ws://localhost:8080"),b=c=>{if(!y||y.readyState!==WebSocket.OPEN){console.log("websocket not available");return}y.send(c)},d=()=>{y||(y=new WebSocket("ws://localhost:8080")),y.onclose=c=>{y=null,setTimeout(d,Math.floor(Math.random()*5e3))},y.onerror=c=>{console.error(c)},y.onmessage=c=>{let f=JSON.parse(c.data);if(t.check(f["#"]))return;t.track(f["#"]),f.get&&s(f,b),f.put&&i(f,b),b(c.data);let p=f["@"],g=n[p];g&&(delete f["#"],delete f["@"],g(f),delete n[p])}};return d(),h(b)},re=Ce;var Ee=(e,t)=>{t||(t=re(e));let o=[],r=!1,n=!1,u=0,l=(i,a,h,y)=>{let b=p=>{u++,l(p,a,h,y)},d=p=>{o=[],u=0,n=!1,y(p)},c=()=>{if(o.length===0){d("Wrong username or password");return}let p=o.shift();t.get({"#":p},async g=>{if(g.err){d(`error getting ${p}: ${g.err}`);return}let w=g.put&&g.put[p];if(!w||!w.auth)return c();let v=JSON.parse(w.auth),m=await K.work(a,v.salt),k=await K.decrypt(v.enc,m);if(!k)return c();if(s.is={username:i,pub:w.pub,epub:w.epub,priv:k.priv,epriv:k.epriv},s.ctx="~"+w.pub,h!==""){let S=E.random(64),j=await K.work(h,S),A=await K.encrypt(k,j),x={auth:JSON.stringify({enc:A,salt:S})},C=await K.sign(x,s.is),D=W(p,C.m,C.s,w.pub);t.put(D,P=>{d(P?`error putting ${x} on ${p}: ${P}`:null)});return}return d(null)})};if(u>9){d("Wrong username or password");return}let f="~@"+i;t.get({"#":f},async p=>{if(p.err){d(`error getting ${f}: ${p.err}`);return}let g=p.put&&p.put[f];if(!g)return b(i);delete p.put[f]._,o=Object.keys(g),c()})},s={create:(i,a,h)=>{let y=d=>{h?h(d):console.log(d)};if(r){y("User is already being created");return}if(i===""){y("Please provide a username");return}if(a===""){y("Please provide a password");return}r=!0;let b="~@"+i;t.get({"#":b},async d=>{if(d.err){r=!1,y(`error getting ${b}: ${d.err}`);return}if(d.put&&d.put[b]){r=!1,y("Username already exists");return}let c=E.random(64),f=await K.work(a,c),p=await K.pair(),g={priv:p.priv,epriv:p.epriv},w=await K.encrypt(g,f),v={username:i,pub:p.pub,epub:p.epub,auth:JSON.stringify({enc:w,salt:c})},m="~"+p.pub,k=await K.sign(v,p),S=W(m,k.m,k.s,p.pub);t.put(S,j=>{if(r=!1,j){y(`error putting ${v} on ${m}: ${j}`);return}let A={[m]:{"#":m}};t.put(W(b,A),x=>{if(x){y(`error putting ${A} on ${b}: ${x}`);return}h&&h(null)})})})},auth:(i,a,h)=>{let y=b=>{h?h(b):b&&console.log(b)};if(n){y("User is already authenticating");return}if(s.is=null,i===""){y("Please provide a username");return}if(a===""){y("Please provide a password");return}n=!0,l(i,a,"",y)},change:(i,a,h,y)=>{let b=d=>{y?y(d):d&&console.log(d)};if(n){b("User is already authenticating");return}if(s.is=null,i===""){b("Please provide a username");return}if(a===""){b("Please provide a password");return}if(h===""){b("Please provide a new password");return}n=!0,l(i,a,h,b)},store:i=>{if(!s.is){console.log("Please authenticate before calling store");return}if(i){typeof globalThis.localStorage<"u"&&globalThis.localStorage.setItem("user.is",JSON.stringify(s.is));return}typeof globalThis.sessionStorage<"u"&&globalThis.sessionStorage.setItem("user.is",JSON.stringify(s.is))},recall:i=>{if(i){if(typeof globalThis.localStorage<"u"){let a=globalThis.localStorage.getItem("user.is");a?(s.is=JSON.parse(a),s.ctx="~"+s.is.pub):console.log("User credentials not stored in local storage")}return}if(typeof globalThis.sessionStorage<"u"){let a=globalThis.sessionStorage.getItem("user.is");a?(s.is=JSON.parse(a),s.ctx="~"+s.is.pub):console.log("User credentials not stored in session storage")}},leave:()=>{s.is=null,s.ctx=null,typeof globalThis.localStorage<"u"&&globalThis.localStorage.removeItem("user.is"),typeof globalThis.sessionStorage<"u"&&globalThis.sessionStorage.removeItem("user.is")},delete:(i,a,h)=>{let y=b=>{h?h(b):console.log(b)};if(n){y("User is already authenticating");return}if(i===""){y("Please provide a username");return}if(a===""){y("Please provide a password");return}n=!0,l(i,a,"",async b=>{if(b){y(b);return}let d={username:null,pub:null,epub:null,auth:null},c=await K.sign(d,s.is),f="~"+s.is.pub,p=W(f,c.m,c.s,s.is.pub);t.put(p,g=>{if(g){y(`error putting null on ${f}: ${g}`);return}s.is=null,s.ctx=null,h&&h(null)})})}};return s},be=Ee;var Te=e=>{let t=re(e),o=be(null,t),r=new Map,n=new Map,u=i=>i===null||i===!0||i===!1||typeof i=="string"||T.is(i)||X.is(i),l=i=>{if(u(i))return!0;if(_.is(i)){let a=[];for(let[h,y]of Object.entries(i)){if(h==="_")return"error underscore cannot be used as an item name";if(_.is(y)||u(y)){a.push(h);continue}return`error {${h}:${y}} cannot be converted to graph`}if(a.length!==0)return a}return`error ${i} cannot be converted to a graph`},s=i=>{let a=(d,c,f)=>{t.get(_.put(d,"#",c),async p=>{if(p.err&&console.log(p.err),p.put&&p.put[c]){delete p.put[c]._,delete p.put[c][J];for(let g of Object.keys(p.put[c])){let w=T.is(p.put[c][g]);if(w){let v=await new Promise(m=>{let k=E.random();n.set(k,{chain:[{item:null,soul:w}]}),s(k).next(null,m)});p.put[c][g]=v}}f(p.put[c])}else f(null)})},h=async(d,c,f)=>{if(f||(f=console.log),!o.is)return e.secure?(f(`error putting data on ${d}: user required in secure mode`),null):W(d,c);if(!o.is)return f(`error putting data on ${d}: user not authenticated`),null;let p=await K.sign(c,o.is);return W(d,p.m,p.s,o.is.pub)},y=d=>{let c=n.get(i);c&&typeof c.cb<"u"?c.cb(d):d&&console.log(d),c&&!c.on&&n.delete(i)},b=(d,c)=>{let f=d&&typeof d.get<"u",p=d&&typeof d.put<"u",g=d&&typeof d.on<"u",w=d&&typeof d.off<"u",v=!1,m=n.get(i);for(var k=1;k<m.chain.length;k++)if(m.chain[k].soul===null){v=!0;break}if(v){let{item:S,soul:j}=m.chain[k-1];return t.get({"#":j,".":S},async A=>{if(A.err){console.log(`error getting ${S} on ${j}: ${A.err}`),c&&c(null);return}let x=A.put&&A.put[j];if(x&&typeof x[S]<"u"){let C=T.is(x[S]);if(C)m.chain[k].soul=C,n.set(i,{chain:m.chain,cb:m.cb}),f?s(i).next(null,d.get,c):p?s(i).put(d.put,c):g?s(i).on(d.on,c):w&&s(i).off(c);else if(f)c(x[S]);else if(p){C=E.random();let D={[S]:T.ify(C)},P=await h(j,D,c);if(P===null)return;t.put(P,Q=>{if(Q){c(`error putting ${S} on ${j}: ${Q}`);return}m.chain[k].soul=C,s(i).put(d.put,c)})}else g?(console.log(`error resolving on for ${S} on ${j}`),c(null)):w&&(console.log(`error resolving off for ${S} on ${j}`),c&&c(null))}else p?c(`error ${S} not found on ${j}`):(console.log(`error ${S} not found on ${j}`),c&&c(null))}),!1}return f&&m.chain[m.chain.length-1].item!==null?(m.chain.push({item:null,soul:null}),s(i).next(null,d.get,c),!1):m.chain[m.chain.length-1]};return{get:(d,c,f)=>{if(typeof c=="function"&&(f=c,c=null),d===null||d===""||d==="_"){f&&f(null);return}if(c&&!f){console.log("lex requires a callback function");return}let p=o.ctx?o.ctx:"root";if(i=E.random(),n.set(i,{chain:[{item:d,soul:p}],cb:f}),!f)return s(i);let{soul:g}=b({get:c},y);g&&a(c,g,y)},next:(d,c,f)=>{let p=v=>{f?f(v):y(v)};if(typeof c=="function"&&(f=c,c=null),!i){console.log("please provide a key using get(key)"),p(null);return}if(d===""||d==="_"){p(null);return}if(c&&!f){console.log("lex requires a callback function");return}let g=n.get(i);if(!g)return;if(f&&typeof g.cb>"u"&&(g.cb=f,f=null),d!==null&&g.chain.push({item:d,soul:null}),!g.cb)return s(i);let{soul:w}=b({get:c},p);w&&a(c,w,p)},put:(d,c)=>{let f=m=>{c?c(m):y(m)};if(!i){f("please provide a key using get(key)");return}let p=n.get(i);if(!p)return;if(!p.cb){if(!c)return;p.cb=c,c=null}let g=l(d);if(typeof g=="string"){f(g);return}let{item:w,soul:v}=b({put:d},f);if(v){if(g===!0){t.get({"#":v,".":w},async m=>{if(m.err){console.log(`error getting ${v}: ${m.err}`);return}let k=m.put&&m.put[v]&&m.put[v][w],S=T.is(k);if(!S){let j=await h(v,{[w]:d},f);if(j===null)return;t.put(j,f);return}t.get({"#":S},async j=>{if(j.err){console.log(`error getting ${S}: ${j.err}`);return}if(!j.put||!j.put[S]){console.log(`error ${S} not found`);return}delete j.put[S]._;for(let x of Object.keys(j.put[S])){if(x===J)continue;let C=await new Promise(D=>{let P=E.random();n.set(P,{chain:[{item:x,soul:S}]}),s(P).put(null,D)});if(C){f(C);return}}let A=await h(v,{[w]:d},f);A!==null&&t.put(A,f)})});return}t.get({"#":v,".":w},async m=>{if(m.err){f(`error getting ${v}.${w}: ${m.err}`);return}let k=m.put&&m.put[v]&&m.put[v][w],S=T.is(k);if(!S){let x={[w]:T.ify(E.random())},C=await h(v,x,f);if(C===null)return;t.put(C,D=>{if(D)f(`error putting ${w} on ${v}: ${D}`);else{let P=E.random(),Q=[{item:w,soul:v}];n.set(P,{chain:Q,cb:p.cb}),s(P).put(d)}});return}let j=!1,A={};for(let x of g){let C=await new Promise(D=>{if(_.is(d[x])){let P=E.random();n.set(P,{chain:[{item:x,soul:S}]}),s(P).put(d[x],D)}else j=!0,A[x]=d[x],D(null)});if(C){f(C);return}}if(j){let x=await h(S,A,f);if(x===null)return;t.put(x,f)}else f(null)})}},on:(d,c)=>{if(typeof d=="function"&&(c=d,d=null),!c)return;if(!i){console.log("please provide a key using get(key)"),c(null);return}let{item:f,soul:p}=b({on:d},c);p&&(n.set(i,{chain:[{item:f,soul:p}],on:!0}),r.set(c,()=>s(i).next(null,c)),t.get({"#":p,".":f},g=>{if(g.err){console.log(`error getting ${p}.${f}: ${g.err}`);return}let w=g.put&&g.put[p]&&g.put[p][f],v=T.is(w);v?d?d=_.put(d,"#",v):d={"#":v,".":null}:d?d=_.put(d,"#",p):d={"#":p,".":f},t.on(d,r.get(c))}))},off:d=>{if(!i){console.log("please provide a key using get(key)"),d&&d(null);return}let{item:c,soul:f}=b({off:!0},d);f&&t.get({"#":f,".":c},p=>{if(p.err){console.log(`error getting ${f}.${c}: ${p.err}`);return}let g=p.put&&p.put[f]&&p.put[f][c],w=T.is(g);w?t.off({"#":w},r.get(d)):t.off({"#":f},r.get(d)),r.delete(d),n.delete(i)})},user:d=>(d&&(o.ctx="~"+d),Object.assign(o,s())),wire:t,SEA:K}};return s()},st=Te;export{st as default};
1
+ var Z={is:e=>!(e instanceof Array)&&(e-parseFloat(e)+1>=0||e===1/0||e===-1/0)},O={is:e=>e?e instanceof Object&&e.constructor===Object||Object.prototype.toString.call(e).match(/^\[object (\w+)\]$/)[1]==="Object":!1,map:(e,t,i)=>{var r=Object.keys(e);for(let n=0;n<r.length;n++){let u=t(e[r[n]],r[n],i);if(typeof u<"u")return u}},put:(e,t,i)=>(e||(e={}),e[t]=i,e),del:(e,t)=>{if(e)return e[t]=null,delete e[t],e}},ke=(e,t,i)=>{if(i.id){i.id=!1;return}if(t==="#"&&typeof e=="string"){i.id=e;return}i.id=!1},T={is:e=>{if(e&&e["#"]&&!e._&&O.is(e)){let t={};if(O.map(e,ke,t),t.id)return t.id}return!1},ify:e=>O.put({},"#",e)},M="_holster_user_public_key",F=(e,t,i,r)=>{let n={[e]:{_:{"#":e,">":{},s:i,p:r}}};for(let[u,f]of Object.entries(t))n[e][u]=f,n[e]._[">"][u]=Date.now();return r&&(n[e][M]=r,n[e]._[">"][M]=Date.now()),n},q=(e,t)=>{if(typeof t>"u")return e===null;if(typeof e>"u")return!0;if(typeof e=="string")return e===t;if(!O.is(e)||!t)return!1;let i=e["*"];if(i)return t.slice(0,i.length)===i;let r=e[">"],n=e["<"];return r&&n?t>=r&&t<=n:r?t>=r:n?t<=n:!1},E={random:e=>{var t="";let i="0123456789ABCDEFGHIJKLMNOPQRSTUVWXZabcdefghijklmnopqrstuvwxyz";e||(e=24);for(let r=0;r<e;r++)t+=i.charAt(Math.floor(Math.random()*i.length));return t}};var je=e=>{e||(e=9e3);let t={store:{}};return t.check=i=>t.store[i]?t.track(i):!1,t.track=i=>(t.store[i]=Date.now(),t.expiry||(t.expiry=setTimeout(()=>{let r=Date.now();Object.keys(t.store).forEach(n=>{r-t.store[n]>e&&delete t.store[n]}),t.expiry=null},e)),i),t},fe=je;var xe=(e,t)=>{let i=e["#"],r=typeof e["."]=="string"?e["."]:!1;var n=t[i];if(!n||!r)return;let u=n[r];if(u)return n={_:n._,[r]:u},n._[">"]={[r]:n._[">"][r]},{[i]:n}},ie=xe;typeof btoa>"u"&&(globalThis.btoa=e=>Buffer.from(e,"binary").toString("base64"),globalThis.atob=e=>Buffer.from(e,"base64").toString("binary"));function Y(){}Object.assign(Y,{from:Array.from});Y.prototype=Object.create(Array.prototype);Y.prototype.toString=function(e,t,i){e||(e="utf8"),t||(t=0);let r=this.length;if(e==="hex"){let n=new Uint8Array(this);return[...Array((i&&i+1||r)-t).keys()].map(u=>n[u+t].toString(16).padStart(2,"0")).join("")}if(e==="utf8")return Array.from({length:(i||r)-t},(n,u)=>String.fromCharCode(this[u+t])).join("");if(e==="base64")return btoa(this)};var H=Y;function G(...e){return console.warn("new SafeBuffer() is deprecated, please use SafeBuffer.from()"),G.from(...e)}G.prototype=Object.create(Array.prototype);Object.assign(G,{from(){if(!Object.keys(arguments).length||arguments[0]==null)throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.");let e=arguments[0],t;if(typeof e=="string"){let r=arguments[1]||"utf8";if(r==="hex"){let n=e.match(/([\da-fA-F]{2})/g).map(u=>parseInt(u,16));if(!n||!n.length)throw new TypeError("Invalid first argument for type 'hex'.");t=H.from(n)}else if(r==="utf8"||r==="binary"){let n=e.length,u=new Uint16Array(n);Array.from({length:n},(f,c)=>u[c]=e.charCodeAt(c)),t=H.from(u)}else if(r==="base64"){let n=atob(e),u=n.length,f=new Uint8Array(u);Array.from({length:u},(c,s)=>f[s]=n.charCodeAt(s)),t=H.from(f)}else console.info("SafeBuffer.from unknown encoding: "+r);return t}if(e.byteLength?e.byteLength:e.length){let r;return e instanceof ArrayBuffer&&(r=new Uint8Array(e)),H.from(r||e)}},alloc(e,t=0){return H.from(new Uint8Array(Array.from({length:e},()=>t)))},concat(e){if(!Array.isArray(e))throw new TypeError("First argument must be Array containing ArrayBuffer or Uint8Array instances.");return H.from(e.reduce((t,i)=>t.concat(Array.from(i)),[]))}});G.prototype.from=G.from;G.prototype.toString=H.prototype.toString;var D=G;var $e=typeof document>"u",ae=$e?(await import("node:crypto")).webcrypto:globalThis.crypto,_=ae.subtle,V=e=>typeof e=="string"?e:JSON.stringify(e),Q=e=>{try{return JSON.parse(e)}catch{return e}},ee=e=>{let t=new Uint8Array(D.alloc(e));return D.from(ae.getRandomValues(t))},X=(e,t)=>{let[i,r]=e.split(".");return{kty:"EC",crv:"P-256",x:i,y:r,d:t,ext:!0,key_ops:t?["sign"]:["verify"]}},te=async e=>{let t=await _.digest({name:"SHA-256"},new TextEncoder().encode(V(e)));return D.from(t)},oe=async(e,t)=>{let i=e+t.toString("utf8"),r=D.from(await te(i),"binary"),n=_e(r);return await _.importKey("jwk",n,{name:"AES-GCM"},!1,["encrypt","decrypt"])},_e=e=>({kty:"oct",k:e.toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/\=/g,""),ext:!1,alg:"A256GCM"});var Oe={pair:async e=>{let t=await _.generateKey({name:"ECDSA",namedCurve:"P-256"},!0,["sign","verify"]).then(async n=>{let u=await _.exportKey("jwk",n.publicKey);return{priv:(await _.exportKey("jwk",n.privateKey)).d,pub:u.x+"."+u.y}}),i=await _.generateKey({name:"ECDH",namedCurve:"P-256"},!0,["deriveKey"]).then(async n=>{let u=await _.exportKey("jwk",n.publicKey);return{epriv:(await _.exportKey("jwk",n.privateKey)).d,epub:u.x+"."+u.y}}),r={pub:t.pub,priv:t.priv,epub:i.epub,epriv:i.epriv};return e&&e(r),r},encrypt:async(e,t,i)=>{if(!t||!t.epriv)return i&&i(null),null;let r={s:ee(9),iv:ee(15)},n=await oe(t.epriv,r.s).then(f=>_.encrypt({name:"AES-GCM",iv:new Uint8Array(r.iv)},f,new TextEncoder().encode(V(e)))),u={ct:D.from(n,"binary").toString("base64"),iv:r.iv.toString("base64"),s:r.s.toString("base64")};return i&&i(u),u},decrypt:async(e,t,i)=>{if(!e||!e.ct||!e.iv||!e.s||!t||!t.epriv)return i&&i(null),null;let r={ct:D.from(e.ct,"base64"),iv:D.from(e.iv,"base64"),s:D.from(e.s,"base64")};try{let n=await oe(t.epriv,r.s).then(f=>_.decrypt({name:"AES-GCM",iv:new Uint8Array(r.iv),tagLength:128},f,new Uint8Array(r.ct))),u=Q(new TextDecoder("utf8").decode(n));return i&&i(u),u}catch{return i&&i(null),null}},verify:async(e,t,i)=>{if(!t||!t.pub)return i&&i(null),null;let r=Q(e),n=await _.importKey("jwk",X(t.pub),{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]),u={};if(typeof r.m=="string")u=r.m;else for(let o of Object.keys(r.m))o!=="_"&&o!=M&&(u[o]=r.m[o]);let f=await te(u),c=new Uint8Array(D.from(r.s,"base64")),s={name:"ECDSA",hash:{name:"SHA-256"}};if(await _.verify(s,n,c,new Uint8Array(f))){let o=Q(r.m);return i&&i(o),o}return i&&i(null),null},sign:async(e,t,i)=>{if(!t||!t.pub||!t.priv)return i&&i(null),null;let r=Q(e),n=await te(r),u=X(t.pub,t.priv),f={name:"ECDSA",namedCurve:"P-256"},c=await _.importKey("jwk",u,f,!1,["sign"]).then(o=>_.sign({name:"ECDSA",hash:{name:"SHA-256"}},o,new Uint8Array(n))),s={m:r,s:D.from(c,"binary").toString("base64")};return i&&i(s),s},work:async(e,t,i)=>{typeof t=="function"&&(i=t,t=void 0),typeof t>"u"&&(t=ee(9));let r=await _.importKey("raw",new TextEncoder().encode(V(e)),{name:"PBKDF2"},!1,["deriveBits"]),n={name:"PBKDF2",iterations:1e5,salt:new TextEncoder().encode(t),hash:{name:"SHA-256"}},u=await _.deriveBits(n,r,512),f={epriv:D.from(u,"binary").toString("base64")};return i&&i(f),f},secret:async(e,t,i)=>{if(!e||!e.epub||!t||!t.epub||!t.epriv)return i&&i(null),null;let r={name:"ECDH",namedCurve:"P-256"},n=X(e.epub),u=await _.importKey("jwk",n,r,!0,[]),f=X(t.epub,t.epriv,!1);delete f.key_ops;let c=await _.importKey("jwk",f,r,!1,["deriveBits"]).then(async s=>{let o=await _.deriveBits({public:u,name:"ECDH",namedCurve:"P-256"},s,256),y=await _.importKey("raw",new Uint8Array(o),{name:"AES-GCM",length:256},!0,["encrypt","decrypt"]);return _.exportKey("jwk",y).then(({k:h})=>h)});return i&&i({epriv:c}),{epriv:c}}},K=Oe;var se=(e,t,i,r)=>e<t?{historical:!0}:e>t?{incoming:!0}:(typeof i!="string"&&(i=JSON.stringify(i)||""),typeof r!="string"&&(r=JSON.stringify(r)||""),i===r?{state:!0}:i<r?{current:!0}:{incoming:!0});se.mix=async(e,t,i,r)=>{var n=Date.now(),u={},f={};let c=0;for(let s of Object.keys(e)){let o=e[s],y=!1,h=!1,w=0,d="",a=i;if(!(!o||!o._)){if(o._.s&&o._.p&&(a=!0),s.length>1&&s[0]==="~")if(s[1]==="@")h=!0,a=!1;else{if(o._.p&&s!="~"+o._.p){console.log(`error public key does not match for soul: ${s}`);continue}o._.p=s.slice(1),a=!0}if(a){if(!o._.s||!o._.p){console.log("error signature and public key required to verify data");continue}if(!await K.verify({m:o,s:o._.s},{pub:o._.p})){console.log(`error could not verify soul: ${s}`);continue}}for(let l of Object.keys(o)){if(l==="_")continue;let p=o[l],g=o._[">"][l],m=(t[s]||{})[l],b=(t[s]||{_:{">":{}}})._[">"][l]||0;if(h&&l!==T.is(p))continue;let S=g-n;if(S>0){if(S>864e5)continue;(c===0||S<c)&&(c=w=S),f[s]||(f[s]={_:{"#":s,">":{},s:o._.s,p:o._.p}}),f[s][l]=p,f[s]._[">"][l]=g}else se(g,b,p,m).incoming&&(u[s]||(u[s]={_:{"#":s,">":{},s:o._.s,p:o._.p}}),t[s]||(t[s]={_:{"#":s,">":{},s:o._.s,p:o._.p}}),t[s][l]=u[s][l]=p,t[s]._[">"][l]=u[s]._[">"][l]=g,r[s]&&setTimeout(()=>{r[s]&&r[s].filter(k=>q(k["."],l)).forEach(k=>k.cb())},100),y=!0)}a&&w!==0&&u[s]&&(Object.assign(f[s],u[s]),delete u[s]),y&&r[s]&&setTimeout(()=>{r[s]&&r[s].filter(l=>q(l["."])).forEach(l=>l.cb())},100)}}return{now:u,defer:f,wait:c}};var ue=se;var J="",L="",ce=()=>{let e=(t,i,r)=>{if(r||(e[J]||(e[J]={}),r=e[J]),!t)return r;let n=0,u={},f=t[n],c=t.length-1,s=typeof i>"u",o=r[f];for(;!o&&n<c;)f+=t[++n],o=r[f];if(o)if(n===c){if(s)return typeof o[L]>"u"?o[J]:o[L];o[L]=i}else return!o[J]&&!s&&(o[J]={}),e(t.slice(++n),i,o[J]);else if(O.map(r,(h,w)=>{let d=0,a="";for(;w[d]===t[d];)a+=w[d++];if(a){if(s)return d<=c?void 0:(u[w.slice(d)]=h,h);let l={[w.slice(d)]:h,[t.slice(d)]:{[L]:i}};return r[a]={[J]:l},delete r[w],!0}})){if(s)return u}else{if(s)return;r[f]||(r[f]={}),r[f][L]=i}};return e};ce.map=function e(t,i,r,n){n||(n=[]);var u=t[J]||t,f=Object.keys(u).sort(),c;for(let s=0;s<f.length;s++){let o=f[s],y=u[o],h=y[L];if(typeof h<"u"){if(h=i(h,n.join("")+o,o,n),typeof h<"u")return h}else r&&i(c,n.join(""),o,n);if(y[J]){if(n.push(o),h=e(y[J],i,r,n),typeof h<"u")return h;n.pop()}}};var P=ce;var ge="",pe="",C="",z=e=>{var t,i=null;if(e||(e={}),e.log||(e.log=console.log),e.batch||(e.batch=10*1e3),e.write||(e.write=1),e.size||(e.size=1024*1024),!e.store){e.log("Radisk needs `store` interface with `{get: fn, put: fn, list: fn}`");return}if(!e.store.get){e.log("Radisk needs `store.get` interface with `(file, cb)`");return}if(!e.store.put){e.log("Radisk needs `store.put` interface with `(file, data, cb)`");return}if(!e.store.list){e.log("Radisk needs a streaming `store.list` interface with `(cb)`");return}let r=(n,u,f)=>{if(n=""+n,typeof u=="function")return f=u,u=r.batch(n),typeof u<"u"||r.thrash.at&&(u=r.thrash.at(n),typeof u<"u")?f(t,u):r.read(n,f);if(r.batch(n,u),f&&r.batch.acks.push(f),++r.batch.ed>=e.batch)return r.thrash();clearTimeout(r.batch.timeout),r.batch.timeout=setTimeout(r.thrash,e.write)};return r.batch=P(),r.batch.acks=[],r.batch.ed=0,r.thrash=()=>{if(r.thrash.ing)return r.thrash.more=!0;clearTimeout(r.batch.timeout),r.thrash.more=!1,r.thrash.ing=!0;var n=r.thrash.at=r.batch;r.batch=null,r.batch=P(),r.batch.acks=[],r.batch.ed=0;let u=0;r.save(n,f=>{++u>1||(f&&e.log(f),n.acks.forEach(c=>c(f)),r.thrash.at=null,r.thrash.ing=!1,r.thrash.more&&r.thrash())})},r.save=(n,u)=>{let f={find:(c,s)=>{if(!(s<f.start))return f.start=s,e.store.list(f.lex),!0},lex:c=>{if(!c||c>f.start)return f.end=c,f.mix(f.file||"!",f.start,f.end),!0;f.file=c},mix:(c,s,o)=>{f.start=f.end=f.file=t,r.parse(c,(y,h)=>{if(y)return u(y);P.map(n,(w,d)=>{if(!(d<s)){if(o&&o<d)return f.start=d,f.start;h(d,w)}}),r.write(c,h,f.next)})},next:c=>{if(c)return u(c);if(f.start)return P.map(n,f.find);u(c)}};P.map(n,f.find)},r.write=(n,u,f)=>{i=null;let c={text:"",count:0,file:n,each:(s,o,y,h)=>{c.count++;var w=z.encode(h.length)+"#"+z.encode(y)+(typeof s>"u"?"":"="+z.encode(s))+`
2
+ `;if(c.count>1&&c.text.length+w.length>e.size)return c.text="",c.limit=Math.ceil(c.count/2),c.count=0,c.sub=P(),P.map(u,c.slice),!0;c.text+=w},put:()=>{e.store.put(n,c.text,f)},slice:(s,o)=>{if(!(o<c.file)){if(++c.count>c.limit){var y=c.file;let h=o.indexOf(pe);return h===-1?c.file=o:c.file=o.substring(0,h),c.sub(c.file,null),c.count=0,r.write(y,c.sub,c.next),!0}c.sub(o,s)}},next:s=>{if(s)return f(s);c.sub=P(),P.map(u,c.slice)||r.write(c.file,c.sub,f)}};P.map(u,c.each,!0)||c.put()},r.read=(n,u)=>{if(i){let o=i(n);if(typeof o<"u")return u(t,o)}let f=n,c=n.indexOf(pe);c!==-1&&(f=n.substring(0,c));let s={lex:o=>{if(!o){if(!s.file){u("no file found",t);return}r.parse(s.file,s.it);return}o>f||o<s.file||(s.file=o)},it:(o,y)=>{o&&e.log(o),y&&(i=y,s.value=y(n)),u(o,s.value)}};e.store.list(s.lex)},r.parse=(n,u)=>{let f={disk:P(),read:(c,s)=>{if(c)return u(c);if(!s)return u(t,f.disk);let o=[],y=f.split(s);for(;y;){let h,w,d=y[1];y=f.split(y[2])||"",y[0]==="#"&&(h=y[1],o=o.slice(0,d),d<=o.length&&o.push(h)),y=f.split(y[2])||"",y[0]!==`
3
+ `&&(y[0]==="="&&(w=y[1]),typeof h<"u"&&typeof w<"u"&&f.disk(o.join(""),w),y=f.split(y[2]))}u(t,f.disk)},split:c=>{if(!c)return;let s=-1,o="",y=null;for(;(y=c[++s])&&y!==C;)o+=y;let h={};if(y)return[o,z.decode(c.slice(s),h),c.slice(s+h.i)]}};e.store.get(n,f.read)},r};z.encode=e=>{let t="";if(e instanceof Array&&e.length===2&&(t=ge+e[1],e=e[0]),typeof e=="string"){let r=0,n=null,u=C;for(;n=e[r++];)n===C&&(u+=C);return u+'"'+e+t+C}let i=T.is(e);if(i)return C+"#"+i+t+C;if(Z.is(e))return C+"+"+(e||0)+t+C;if(e===!0)return C+"+"+t+C;if(e===!1)return C+"-"+t+C;if(e===null)return C+" "+t+C};z.decode=(e,t)=>{var i="",r=-1,n=0,u=null,f=null;if(e[0]!==C)return;for(;u=e[++r];)if(f){if(u===C&&--n<=0)break;i+=u}else u===C?n++:f=u||!0;t&&(t.i=r+1);let[c,s]=i.split(ge);if(s){if(s=parseFloat(s),f==='"')return[c,s];if(f==="#")return[T.ify(c),s];if(f==="+")return c.length===0?[!0,s]:[parseFloat(c),s];if(f==="-")return[!1,s];if(f===" ")return[null,s]}else{if(f==='"')return i;if(f==="#")return T.ify(i);if(f==="+")return i.length===0?!0:parseFloat(i);if(f==="-")return!1;if(f===" ")return null}};var de=z;var he=typeof document>"u",I=he?await import("node:fs"):void 0,ye="",re="",le=re+"+0"+re+"#"+re+'"root'+re,Ee=e=>{let t=e.file;if(he)return I.existsSync(t)||I.mkdirSync(t),I.existsSync(t+"/!")||I.writeFileSync(t+"/!",le),{get:(i,r)=>{I.readFile(t+"/"+i,(n,u)=>{if(n){if(n.code==="ENOENT"){r();return}console.log("fs.readFile error:",n)}u&&(u=u.toString()),r(n,u)})},put:(i,r,n)=>{var u=Math.random().toString(36).slice(-9),f=i+"."+u+".tmp";I.writeFile(f,r,c=>{if(c){n(c);return}I.rename(f,t+"/"+i,n)})},list:i=>{I.readdir(t,(r,n)=>{n.forEach(i),i()})}};if(e.indexedDB){let i,r=indexedDB.open(t,1);return r.onupgradeneeded=n=>{n.target.result.createObjectStore(t)},r.onerror=n=>{console.log(n)},r.onsuccess=()=>{if(i=r.result,i){let u=i.transaction([t],"readonly").objectStore(t).getKey("!");u.onerror=()=>{console.log(`error getting key ${t}/!`)},u.onsuccess=()=>{if(!u.result){let c=i.transaction([t],"readwrite").objectStore(t).put(le,"!");c.onerror=()=>{console.log(`error putting root on ${t}/!`)}}}}else console.log("error indexedDB not available")},{get:(n,u)=>{if(i){let c=i.transaction([t],"readonly").objectStore(t).get(n);c.onerror=()=>{console.log(`error getting ${t}/${n}`)},c.onsuccess=()=>{u(null,c.result)}}else u("error indexedDB not available")},put:(n,u,f)=>{if(i){let s=i.transaction([t],"readwrite").objectStore(t).put(u,n);s.onerror=()=>{console.log(`error putting data on ${t}/${n}`)},s.onsuccess=()=>{f(null)}}else f("error indexedDB not available")},list:n=>{if(i){let f=i.transaction([t],"readonly").objectStore(t).getAllKeys();f.onerror=()=>console.log("error getting keys for",t),f.onsuccess=()=>{f.result.forEach(n),n()}}else console.log("error indexedDB not available"),n()}}}return{get:(i,r)=>{r(null,le)},put:(i,r,n)=>{n(null)},list:i=>{i("!"),i()}}},Ce=e=>{O.is(e)||(e={}),e.file=String(e.file||"radata"),e.store||(e.store=Ee(e));let t=de(e);return{get:(i,r)=>{if(!i){r("lex required");return}var n=i["#"],u=typeof i["."]=="string"?i["."]:"",f;let c=(s,o)=>{q(i["."],o)&&(f||(f={_:{"#":n,">":{}}}),f[o]=s[0],f._[">"][o]=s[1])};t(n+ye+u,(s,o)=>{let y;O.is(o)?(P.map(o,c),f||c(o,u),y={[n]:f}):o&&(c(o,u),y={[n]:f}),r(s,y)})},put:(i,r)=>{if(!i){r("graph required");return}var n=0;let u=f=>{if(n--,!u.err){if(u.err=f,u.err){r(u.err);return}n===0&&r(null)}};Object.keys(i).forEach(f=>{var c=i[f];Object.keys(c).forEach(s=>{if(s==="_")return;n++;let o=c[s],y=c._[">"][s];t(f+ye+s,[o,y],u)})})}}},me=Ce;var we=typeof document>"u",be=we?await import("ws"):void 0;typeof globalThis.WebSocket>"u"&&(globalThis.WebSocket=be?.WebSocket);var Te=e=>{let t=fe(e.maxAge),i=me(e),r={},n={},u={},f=async(d,a,l)=>{for(let p of Object.keys(d)){let g=await new Promise(v=>{o({"#":p},v,a)});if(g.err)return l&&l(g.err),!1;let m=d[p],b=m._?m._.p:void 0,S=M;if(!(!g.put||!g.put[p]||g.put[p][S]===b))return l&&l(`error in wire check public key does not match for soul: ${p}`),!1}return!0},c=(d,a)=>{let l=ie(d.get,r);l?a(JSON.stringify({"#":t.track(E.random(9)),"@":d["#"],put:l})):i.get(d.get,(p,g)=>{a(JSON.stringify({"#":t.track(E.random(9)),"@":d["#"],put:g,err:p}))})},s=async(d,a)=>{let l=await ue.mix(d.put,r,e.secure,u);if(Object.keys(l.now).length){if(!await f(l.now,a))return;i.put(l.now,p=>{a(JSON.stringify({"#":t.track(E.random(9)),"@":d["#"],err:p}))})}Object.keys(l.defer).length&&setTimeout(()=>s({put:l.defer},a),l.wait)},o=(d,a,l,p)=>{if(!a)return;O.is(p)||(p={});let g=ie(d,r);if(g){a({put:g});return}i.get(d,(m,b)=>{if(b){a({put:b,err:m});return}m&&console.log(m);let S=E.random(9);n[S]=a,l(JSON.stringify({"#":t.track(S),get:d})),setTimeout(()=>{let v=n[S];if(v){let k=d["#"],x={[k]:null};typeof d["."]=="string"&&(x[k]={[d["."]]:null}),v({put:x}),delete n[S]}},p.wait||100)})},y=d=>({get:(a,l,p)=>{o(a,l,d,p)},put:async(a,l)=>{let p=await ue.mix(a,r,e.secure,u);Object.keys(p.now).length===0||!await f(p.now,d,l)||(i.put(p.now,l),d(JSON.stringify({"#":t.track(E.random(9)),put:a})))},on:(a,l)=>{let p=a&&a["#"];!p||!l||(u[p]?u[p].push({".":a["."],cb:l}):u[p]=[{".":a["."],cb:l}])},off:(a,l)=>{let p=a&&a["#"];if(!(!p||!u[p]))if(l){let g=u[p].find(m=>m.cb===l);g&&u[p].splice(u[p].indexOf(g),1)}else delete u[p]}});if(we){let d=e.wss,a=()=>d.clients();if(!d){let p=e.server?{server:e.server}:{port:e.port||8765};d=new be.WebSocketServer(p),a=()=>d.clients}let l=(p,g)=>{a().forEach(m=>{m.readyState===WebSocket.OPEN&&m.send(p,{binary:g})})};return d.on("connection",p=>{p.on("error",console.error),p.on("message",(g,m)=>{let b=JSON.parse(g);if(t.check(b["#"]))return;t.track(b["#"]),b.get&&c(b,l),b.put&&s(b,l),l(g,m);let S=b["@"],v=n[S];v&&(delete b["#"],delete b["@"],v(b),delete n[S])})}),y(l)}let h=[],w=d=>{h.forEach(a=>{a&&a.readyState===WebSocket.OPEN?a.send(d):console.log("websocket not available")})};return e.peers instanceof Array||(e.peers=[`ws://localhost:${e.port||8765}`]),e.peers.forEach(d=>{let a=new WebSocket(d);h.push(a);let l=()=>{a||(a=new WebSocket(d)),a.onclose=p=>{h.indexOf(a)!==-1&&h.splice(h.indexOf(a),1),a=null,setTimeout(l,Math.floor(Math.random()*5e3))},a.onerror=p=>{console.error(p)},a.onmessage=p=>{let g=JSON.parse(p.data);if(t.check(g["#"]))return;t.track(g["#"]),g.get&&c(g,w),g.put&&s(g,w),w(p.data);let m=g["@"],b=n[m];b&&(delete g["#"],delete g["@"],b(g),delete n[m])}};l()}),y(w)},ne=Te;var Ke=(e,t)=>{t||(t=ne(e));let i=[],r=!1,n=!1,u=0,f=(s,o,y,h)=>{let w=p=>{u++,f(p,o,y,h)},d=p=>{i=[],u=0,n=!1,h(p)},a=()=>{if(i.length===0){d("Wrong username or password");return}let p=i.shift();t.get({"#":p},async g=>{if(g.err){d(`error getting ${p}: ${g.err}`);return}let m=g.put&&g.put[p];if(!m||!m.auth)return a();let b=JSON.parse(m.auth),S=await K.work(o,b.salt),v=await K.decrypt(b.enc,S);if(!v)return a();if(c.is={username:s,pub:m.pub,epub:m.epub,priv:v.priv,epriv:v.epriv},c.ctx="~"+m.pub,y!==""){let k=E.random(64),x=await K.work(y,k),j=await K.encrypt(v,x),$={auth:JSON.stringify({enc:j,salt:k})},B=await K.sign($,c.is),A=F(p,B.m,B.s,m.pub);t.put(A,N=>{d(N?`error putting ${$} on ${p}: ${N}`:null)});return}return d(null)})};if(u>9){d("Wrong username or password");return}let l="~@"+s;t.get({"#":l},async p=>{if(p.err){d(`error getting ${l}: ${p.err}`);return}let g=p.put&&p.put[l];if(!g)return w(s);delete p.put[l]._,i=Object.keys(g),a()})},c={create:(s,o,y)=>{let h=d=>{y?y(d):console.log(d)};if(r){h("User is already being created");return}if(s===""){h("Please provide a username");return}if(o===""){h("Please provide a password");return}r=!0;let w="~@"+s;t.get({"#":w},async d=>{if(d.err){r=!1,h(`error getting ${w}: ${d.err}`);return}if(d.put&&d.put[w]){r=!1,h("Username already exists");return}let a=E.random(64),l=await K.work(o,a),p=await K.pair(),g={priv:p.priv,epriv:p.epriv},m=await K.encrypt(g,l),b={username:s,pub:p.pub,epub:p.epub,auth:JSON.stringify({enc:m,salt:a})},S="~"+p.pub,v=await K.sign(b,p),k=F(S,v.m,v.s,p.pub);t.put(k,x=>{if(r=!1,x){h(`error putting ${b} on ${S}: ${x}`);return}let j={[S]:{"#":S}};t.put(F(w,j),$=>{if($){h(`error putting ${j} on ${w}: ${$}`);return}y&&y(null)})})})},auth:(s,o,y)=>{let h=w=>{y?y(w):w&&console.log(w)};if(n){h("User is already authenticating");return}if(c.is=null,s===""){h("Please provide a username");return}if(o===""){h("Please provide a password");return}n=!0,f(s,o,"",h)},change:(s,o,y,h)=>{let w=d=>{h?h(d):d&&console.log(d)};if(n){w("User is already authenticating");return}if(c.is=null,s===""){w("Please provide a username");return}if(o===""){w("Please provide a password");return}if(y===""){w("Please provide a new password");return}n=!0,f(s,o,y,w)},store:s=>{if(!c.is){console.log("Please authenticate before calling store");return}if(s){typeof globalThis.localStorage<"u"&&globalThis.localStorage.setItem("user.is",JSON.stringify(c.is));return}typeof globalThis.sessionStorage<"u"&&globalThis.sessionStorage.setItem("user.is",JSON.stringify(c.is))},recall:s=>{if(s){if(typeof globalThis.localStorage<"u"){let o=globalThis.localStorage.getItem("user.is");o?(c.is=JSON.parse(o),c.ctx="~"+c.is.pub):console.log("User credentials not stored in local storage")}return}if(typeof globalThis.sessionStorage<"u"){let o=globalThis.sessionStorage.getItem("user.is");o?(c.is=JSON.parse(o),c.ctx="~"+c.is.pub):console.log("User credentials not stored in session storage")}},leave:()=>{c.is=null,c.ctx=null,typeof globalThis.localStorage<"u"&&globalThis.localStorage.removeItem("user.is"),typeof globalThis.sessionStorage<"u"&&globalThis.sessionStorage.removeItem("user.is")},delete:(s,o,y)=>{let h=w=>{y?y(w):console.log(w)};if(n){h("User is already authenticating");return}if(s===""){h("Please provide a username");return}if(o===""){h("Please provide a password");return}n=!0,f(s,o,"",async w=>{if(w){h(w);return}let d={username:null,pub:null,epub:null,auth:null},a=await K.sign(d,c.is),l="~"+c.is.pub,p=F(l,a.m,a.s,c.is.pub);t.put(p,g=>{if(g){h(`error putting null on ${l}: ${g}`);return}c.is=null,c.ctx=null,y&&y(null)})})}};return c},ve=Ke;var Pe=e=>{typeof e=="string"?e={peers:[e]}:e instanceof Array?e={peers:e}:O.is(e)||(e={});let t=ne(e),i=ve(null,t),r=new Map,n=new Map,u,f=o=>o===null||o===!0||o===!1||typeof o=="string"||T.is(o)||Z.is(o),c=o=>{if(f(o))return!0;if(O.is(o)){let y=[];for(let[h,w]of Object.entries(o)){if(h==="_")return"error underscore cannot be used as an item name";if(O.is(w)||f(w)){y.push(h);continue}return`error {${h}:${w}} cannot be converted to graph`}if(y.length!==0)return y}return`error ${o} cannot be converted to a graph`},s=o=>{let y=(a,l,p,g)=>{t.get(O.put(a,"#",l),async m=>{if(m.err&&console.log(m.err),m.put&&m.put[l]){delete m.put[l]._,delete m.put[l][M];for(let b of Object.keys(m.put[l])){let S=T.is(m.put[l][b]);if(S){let v=await new Promise(k=>{let x=E.random();n.set(x,{chain:[{item:null,soul:S}]}),s(x).next(null,k)});m.put[l][b]=v}}p(m.put[l])}else p(null)},g)},h=async(a,l,p)=>{if(p||(p=console.log),i.is){let g=await K.sign(l,i.is);return F(a,g.m,g.s,i.is.pub)}return e.secure?(p(`error putting data on ${a}: user required in secure mode`),null):F(a,l)},w=a=>{let l=n.get(o);l&&typeof l.cb<"u"?l.cb(a):a&&console.log(a),l&&!l.on&&n.delete(o)},d=(a,l)=>{let p=a&&typeof a.get<"u",g=a&&typeof a.put<"u",m=a&&typeof a.on<"u",b=a&&typeof a.off<"u",S=!1,v=n.get(o);for(var k=1;k<v.chain.length;k++)if(v.chain[k].soul===null){S=!0;break}if(S){let{item:x,soul:j}=v.chain[k-1];return t.get({"#":j,".":x},async $=>{if($.err){console.log(`error getting ${x} on ${j}: ${$.err}`),l&&l(null);return}let B=$.put&&$.put[j];if(B&&typeof B[x]<"u"){let A=T.is(B[x]);if(A)v.chain[k].soul=A,n.set(o,{chain:v.chain,cb:v.cb}),p?s(o).next(null,a.get,l):g?s(o).put(a.put,l):m?s(o).on(a.on,l):b&&s(o).off(l);else if(p)l(B[x]);else if(g){A=E.random();let N={[x]:T.ify(A)},W=await h(j,N,l);if(W===null)return;t.put(W,U=>{if(U){l(`error putting ${x} on ${j}: ${U}`);return}v.chain[k].soul=A,s(o).put(a.put,l)})}else m?(console.log(`error resolving on for ${x} on ${j}`),l(null)):b&&(console.log(`error resolving off for ${x} on ${j}`),l&&l(null))}else g?l(`error ${x} not found on ${j}`):(console.log(`error ${x} not found on ${j}`),l&&l(null))}),!1}return p&&v.chain[v.chain.length-1].item!==null?(v.chain.push({item:null,soul:null}),s(o).next(null,a.get,l),!1):v.chain[v.chain.length-1]};return{get:(a,l,p,g)=>{if(typeof l=="function"&&(p=l,l=null),a===null||a===""||a==="_"){p&&p(null);return}if(l&&!p){console.log("error lex requires a callback function");return}let m=u||(i.ctx?i.ctx:"root");if(o=E.random(),n.set(o,{chain:[{item:a,soul:m}],cb:p}),!p)return s(o);let{soul:b}=d({get:l},w);b&&y(l,b,w,g)},next:(a,l,p,g)=>{let m=v=>{p?p(v):w(v)};if(typeof l=="function"&&(p=l,l=null),!o){console.log("error please provide a key using get(key)"),m(null);return}if(a===""||a==="_"){m(null);return}if(l&&!p){console.log("error lex requires a callback function");return}let b=n.get(o);if(!b)return;if(p&&typeof b.cb>"u"&&(b.cb=p,p=null),a!==null&&b.chain.push({item:a,soul:null}),!b.cb)return s(o);let{soul:S}=d({get:l},m);S&&y(l,S,m,g)},put:(a,l,p)=>{typeof l=="function"&&(p=l,l=!1);let g=k=>{p?p(k):w(k)};if(!o){g("please provide a key using get(key)");return}let m=n.get(o);if(!m)return;if(!m.cb){if(!p)return;m.cb=p,p=null}l&&(a={[E.random()]:a});let b=c(a);if(typeof b=="string"){g(b);return}let{item:S,soul:v}=d({put:a},g);if(v){if(b===!0){t.get({"#":v,".":S},async k=>{if(k.err){console.log(`error getting ${v}: ${k.err}`);return}let x=k.put&&k.put[v]&&k.put[v][S],j=T.is(x);if(!j){let $=await h(v,{[S]:a},g);if($===null)return;t.put($,g);return}t.get({"#":j},async $=>{if($.err){console.log(`error getting ${j}: ${$.err}`);return}if(!$.put||!$.put[j]){console.log(`error ${j} not found`);return}delete $.put[j]._;for(let A of Object.keys($.put[j])){if(A===M)continue;let N=await new Promise(W=>{let U=E.random();n.set(U,{chain:[{item:A,soul:j}]}),s(U).put(null,W)});if(N){g(N);return}}let B=await h(v,{[S]:a},g);B!==null&&t.put(B,g)})});return}t.get({"#":v,".":S},async k=>{if(k.err){g(`error getting ${v}.${S}: ${k.err}`);return}let x=k.put&&k.put[v]&&k.put[v][S],j=T.is(x);if(!j){let A={[S]:T.ify(E.random())},N=await h(v,A,g);if(N===null)return;t.put(N,W=>{if(W)g(`error putting ${S} on ${v}: ${W}`);else{let U=E.random(),Se=[{item:S,soul:v}];n.set(U,{chain:Se,cb:m.cb}),s(U).put(a)}});return}let $=!1,B={};for(let A of b){let N=await new Promise(W=>{if(O.is(a[A])){let U=E.random();n.set(U,{chain:[{item:A,soul:j}]}),s(U).put(a[A],W)}else $=!0,B[A]=a[A],W(null)});if(N){g(N);return}}if($){let A=await h(j,B,g);if(A===null)return;t.put(A,g)}else g(null)})}},on:(a,l)=>{if(typeof a=="function"&&(l=a,a=null),!l)return;if(!o){console.log("error please provide a key using get(key)"),l(null);return}let{item:p,soul:g}=d({on:a},l);g&&(n.set(o,{chain:[{item:p,soul:g}],on:!0}),r.set(l,()=>s(o).next(null,l)),t.get({"#":g,".":p},m=>{if(m.err){console.log(`error getting ${g}.${p}: ${m.err}`);return}let b=m.put&&m.put[g]&&m.put[g][p],S=T.is(b);S?a?a=O.put(a,"#",S):a={"#":S,".":null}:a?a=O.put(a,"#",g):a={"#":g,".":p},t.on(a,r.get(l))}))},off:a=>{if(!o){console.log("error please provide a key using get(key)"),a&&a(null);return}let{item:l,soul:p}=d({off:!0},a);p&&t.get({"#":p,".":l},g=>{if(g.err){console.log(`error getting ${p}.${l}: ${g.err}`);return}let m=g.put&&g.put[p]&&g.put[p][l],b=T.is(m);b?t.off({"#":b},r.get(a)):t.off({"#":p},r.get(a)),r.delete(a),n.delete(o)})},user:a=>(a?u="~"+a:u=null,Object.assign(i,s())),wire:t,SEA:K}};return s()},lt=Pe;export{lt as default};
4
4
  //# sourceMappingURL=holster.js.map