@mblaney/holster 1.0.4 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/holster.js +3 -3
- package/build/holster.js.map +3 -3
- package/package.json +1 -1
- package/src/radisk.js +23 -50
- package/test/radisk.test.js +14 -18
- package/test/split.test.js +317 -0
package/build/holster.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var V={is:e=>!(e instanceof Array)&&(e-parseFloat(e)+1>=0||e===1/0||e===-1/0)},P={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 i=Object.keys(e);for(let r=0;r<i.length;r++){let u=t(e[i[r]],i[r],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}},Ae=(e,t,o)=>{if(o.id){o.id=!1;return}if(t==="#"&&typeof e=="string"){o.id=e;return}o.id=!1},N={is:e=>{if(e&&e["#"]&&!e._&&P.is(e)){let t={};if(P.map(e,Ae,t),t.id)return t.id}return!1},ify:e=>P.put({},"#",e)},W="_holster_user_signature",J="_holster_user_public_key",H=(e,t,o,i)=>{let r={[e]:{_:{"#":e,">":{}}}};for(let[u,a]of Object.entries(t))u!=="_"&&u!=J&&u!=W&&(r[e][u]=a,r[e]._[">"][u]=Date.now());return o&&i&&(r[e][W]=o,r[e]._[">"][W]=Date.now(),r[e][J]=i,r[e]._[">"][J]=Date.now()),r},q=(e,t)=>{if(typeof t>"u")return e===null;if(typeof e>"u")return!0;if(typeof e=="string")return e===t;if(!P.is(e)||!t)return!1;let o=e["*"];if(o)return t.slice(0,o.length)===o;let i=e[">"],r=e["<"];return i&&r?t>=i&&t<=r:i?t>=i:r?t<=r:!1},E={random:e=>{var t="";let o="0123456789ABCDEFGHIJKLMNOPQRSTUVWXZabcdefghijklmnopqrstuvwxyz";e||(e=24);for(let i=0;i<e;i++)t+=o.charAt(Math.floor(Math.random()*o.length));return t}};var _e=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 i=Date.now();Object.keys(t.store).forEach(r=>{i-t.store[r]>e&&delete t.store[r]}),t.expiry=null},e)),o),t},ge=_e;var xe=(e,t)=>{let o=e["#"];if(!t[o])return;let i={_:{"#":o,">":{}}};if(typeof e["."]=="string"){let r=e["."];if(typeof t[o][r]>"u")return;i[r]=t[o][r],i._[">"][r]=t[o]._[">"][r]}else for(let r of Object.keys(t[o]))q(e["."],r)&&(i[r]=t[o][r],i._[">"][r]=t[o]._[">"][r]);return{[o]:i}},ue=xe;typeof btoa>"u"&&(globalThis.btoa=e=>Buffer.from(e,"binary").toString("base64"),globalThis.atob=e=>Buffer.from(e,"base64").toString("binary"));function ee(){}Object.assign(ee,{from:Array.from});ee.prototype=Object.create(Array.prototype);ee.prototype.toString=function(e,t,o){e||(e="utf8"),t||(t=0);let i=this.length;if(e==="hex"){let r=new Uint8Array(this);return[...Array((o&&o+1||i)-t).keys()].map(u=>r[u+t].toString(16).padStart(2,"0")).join("")}if(e==="utf8")return Array.from({length:(o||i)-t},(r,u)=>String.fromCharCode(this[u+t])).join("");if(e==="base64")return btoa(this)};var R=ee;function L(...e){return console.warn("new SafeBuffer() is deprecated, please use SafeBuffer.from()"),L.from(...e)}L.prototype=Object.create(Array.prototype);Object.assign(L,{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 i=arguments[1]||"utf8";if(i==="hex"){let r=e.match(/([\da-fA-F]{2})/g).map(u=>parseInt(u,16));if(!r||!r.length)throw new TypeError("Invalid first argument for type 'hex'.");t=R.from(r)}else if(i==="utf8"||i==="binary"){let r=e.length,u=new Uint16Array(r);Array.from({length:r},(a,f)=>u[f]=e.charCodeAt(f)),t=R.from(u)}else if(i==="base64"){let r=atob(e),u=r.length,a=new Uint8Array(u);Array.from({length:u},(f,n)=>a[n]=r.charCodeAt(n)),t=R.from(a)}else console.info("SafeBuffer.from unknown encoding: "+i);return t}if(e.byteLength?e.byteLength:e.length){let i;return e instanceof ArrayBuffer&&(i=new Uint8Array(e)),R.from(i||e)}},alloc(e,t=0){return R.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 R.from(e.reduce((t,o)=>t.concat(Array.from(o)),[]))}});L.prototype.from=L.from;L.prototype.toString=R.prototype.toString;var U=L;var Ee=typeof document>"u",de=Ee?(await import("node:crypto")).webcrypto:globalThis.crypto,T=de.subtle,te=e=>typeof e=="string"?e:JSON.stringify(e),Z=e=>{try{return JSON.parse(e)}catch{return e}},re=e=>{let t=new Uint8Array(U.alloc(e));return U.from(de.getRandomValues(t))},Y=(e,t)=>{let[o,i]=e.split(".");return{kty:"EC",crv:"P-256",x:o,y:i,d:t,ext:!0,key_ops:t?["sign"]:["verify"]}},ne=async e=>{let t=await T.digest({name:"SHA-256"},new TextEncoder().encode(te(e)));return U.from(t)},le=async(e,t)=>{let o=e+t.toString("utf8"),i=U.from(await ne(o),"binary"),r=Te(i);return await T.importKey("jwk",r,{name:"AES-GCM"},!1,["encrypt","decrypt"])},Te=e=>({kty:"oct",k:e.toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/\=/g,""),ext:!1,alg:"A256GCM"});var Pe={pair:async e=>{let t=await T.generateKey({name:"ECDSA",namedCurve:"P-256"},!0,["sign","verify"]).then(async r=>{let u=await T.exportKey("jwk",r.publicKey);return{priv:(await T.exportKey("jwk",r.privateKey)).d,pub:u.x+"."+u.y}}),o=await T.generateKey({name:"ECDH",namedCurve:"P-256"},!0,["deriveKey"]).then(async r=>{let u=await T.exportKey("jwk",r.publicKey);return{epriv:(await T.exportKey("jwk",r.privateKey)).d,epub:u.x+"."+u.y}}),i={pub:t.pub,priv:t.priv,epub:o.epub,epriv:o.epriv};return e&&e(i),i},encrypt:async(e,t,o)=>{if(!t||!t.epriv)return o&&o(null),null;let i={s:re(9),iv:re(15)},r=await le(t.epriv,i.s).then(a=>T.encrypt({name:"AES-GCM",iv:new Uint8Array(i.iv)},a,new TextEncoder().encode(te(e)))),u={ct:U.from(r,"binary").toString("base64"),iv:i.iv.toString("base64"),s:i.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 i={ct:U.from(e.ct,"base64"),iv:U.from(e.iv,"base64"),s:U.from(e.s,"base64")};try{let r=await le(t.epriv,i.s).then(a=>T.decrypt({name:"AES-GCM",iv:new Uint8Array(i.iv),tagLength:128},a,new Uint8Array(i.ct))),u=Z(new TextDecoder("utf8").decode(r));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 i=Z(e),r=await T.importKey("jwk",Y(t.pub),{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]),u={};if(typeof i.m=="string")u=i.m;else for(let g of Object.keys(i.m).sort())g!=="_"&&g!=J&&g!=W&&(u[g]=i.m[g]);let a=await ne(u),f=new Uint8Array(U.from(i.s,"base64")),n={name:"ECDSA",hash:{name:"SHA-256"}};if(await T.verify(n,r,f,new Uint8Array(a))){let g=Z(i.m);return o&&o(g),g}return o&&o(null),null},sign:async(e,t,o)=>{if(!t||!t.pub||!t.priv)return o&&o(null),null;let i={};if(typeof e=="string")i=e;else{let g=Z(e);for(let y of Object.keys(g).sort())y!=="_"&&y!=J&&y!=W&&(i[y]=g[y])}let r=await ne(i),u=Y(t.pub,t.priv),a={name:"ECDSA",namedCurve:"P-256"},f=await T.importKey("jwk",u,a,!1,["sign"]).then(g=>T.sign({name:"ECDSA",hash:{name:"SHA-256"}},g,new Uint8Array(r))),n={m:i,s:U.from(f,"binary").toString("base64")};return o&&o(n),n},work:async(e,t,o)=>{typeof t=="function"&&(o=t,t=void 0),typeof t>"u"&&(t=re(9));let i=await T.importKey("raw",new TextEncoder().encode(te(e)),{name:"PBKDF2"},!1,["deriveBits"]),r={name:"PBKDF2",iterations:1e5,salt:new TextEncoder().encode(t),hash:{name:"SHA-256"}},u=await T.deriveBits(r,i,512),a={epriv:U.from(u,"binary").toString("base64")};return o&&o(a),a},secret:async(e,t,o)=>{if(!e||!e.epub||!t||!t.epub||!t.epriv)return o&&o(null),null;let i={name:"ECDH",namedCurve:"P-256"},r=Y(e.epub),u=await T.importKey("jwk",r,i,!0,[]),a=Y(t.epub,t.epriv,!1);delete a.key_ops;let f=await T.importKey("jwk",a,i,!1,["deriveBits"]).then(async n=>{let g=await T.deriveBits({public:u,name:"ECDH",namedCurve:"P-256"},n,256),y=await T.importKey("raw",new Uint8Array(g),{name:"AES-GCM",length:256},!0,["encrypt","decrypt"]);return T.exportKey("jwk",y).then(({k:m})=>m)});return o&&o({epriv:f}),{epriv:f}}},I=Pe;var fe=(e,t,o,i)=>e<t?{historical:!0}:e>t?{incoming:!0}:(typeof o!="string"&&(o=JSON.stringify(o)||""),typeof i!="string"&&(i=JSON.stringify(i)||""),o===i?{state:!0}:o<i?{current:!0}:{incoming:!0});fe.mix=async(e,t,o,i)=>{let r=Date.now(),u={},a={},f=0;for(let n of Object.keys(e)){let g=e[n],y=!1,m=!1,w=0,s=o;if(!g||!g._)continue;let l=g[W],c=g[J];if(l&&c&&(s=!0),n.length>1&&n[0]==="~")if(n[1]==="@")m=!0,s=!1;else{if(c&&n!="~"+c){console.log(`error public key does not match for soul: ${n}`);continue}s=!0}if(!(s&&(!l||!c||!await I.verify({m:g,s:l},{pub:c})))){for(let p of Object.keys(g)){if(p==="_")continue;let d=g[p],h=g._&&g._[">"]?g._[">"][p]:0,v=(t[n]||{})[p],b=(t[n]||{_:{">":{}}})._[">"][p]||0;if(m&&p!==N.is(d)){console.log(`error alias ${m}: ${p} !== ${N.is(d)}`);continue}let S=h-r;if(S>0){if(S>864e5)continue;(f===0||S<f)&&(f=w=S),a[n]||(a[n]={_:{"#":n,">":{}}}),a[n][p]=d,a[n]._[">"][p]=h}else fe(h,b,d,v).incoming&&(u[n]||(u[n]={_:{"#":n,">":{}}}),t[n]||(t[n]={_:{"#":n,">":{}}}),t[n][p]=u[n][p]=d,t[n]._[">"][p]=u[n]._[">"][p]=h,i[n]&&setTimeout(()=>{i[n]&&i[n].filter(j=>q(j["."],p)).forEach(j=>j.cb())},100),y=!0)}s&&w!==0&&u[n]&&(Object.assign(a[n],u[n]),delete u[n]),y&&i[n]&&setTimeout(()=>{i[n]&&i[n].filter(p=>q(p["."])).forEach(p=>p.cb())},100)}}return{now:u,defer:a,wait:f}};var ae=fe;var F="",X="",ye=()=>{let e=(t,o,i)=>{if(i||(e[F]||(e[F]={}),i=e[F]),!t)return i;let r=0,u={},a=t[r],f=t.length-1,n=typeof o>"u",g=i[a];for(;!g&&r<f;)a+=t[++r],g=i[a];if(g)if(r===f){if(n)return typeof g[X]>"u"?g[F]:g[X];g[X]=o}else return!g[F]&&!n&&(g[F]={}),e(t.slice(++r),o,g[F]);else if(P.map(i,(m,w)=>{let s=0,l="";for(;w[s]===t[s];)l+=w[s++];if(l){if(n)return s<=f?void 0:(u[w.slice(s)]=m,m);let c={[w.slice(s)]:m,[t.slice(s)]:{[X]:o}};return i[l]={[F]:c},delete i[w],!0}})){if(n)return u}else{if(n)return;i[a]||(i[a]={}),i[a][X]=o}};return e};ye.map=function e(t,o,i,r){r||(r=[]);var u=t[F]||t,a=Object.keys(u).sort(),f;for(let n=0;n<a.length;n++){let g=a[n],y=u[g],m=y[X];if(typeof m<"u"){if(m=o(m,r.join("")+g,g,r),typeof m<"u")return m}else i&&o(f,r.join(""),g,r);if(y[F]){if(r.push(g),m=e(y[F],o,i,r),typeof m<"u")return m;r.pop()}}};var D=ye;var me="",he="",K="",Q=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 i=(r,u,a)=>{if(r=""+r,typeof u=="function")return a=u,u=i.batch(r),typeof u<"u"||i.thrash.at&&(u=i.thrash.at(r),typeof u<"u")?a(t,u):i.read(r,a);if(i.batch(r,u),a&&i.batch.acks.push(a),++i.batch.ed>=e.batch)return i.thrash();clearTimeout(i.batch.timeout),i.batch.timeout=setTimeout(i.thrash,e.write)};return i.batch=D(),i.batch.acks=[],i.batch.ed=0,i.thrash=()=>{if(i.thrash.ing)return i.thrash.more=!0;clearTimeout(i.batch.timeout),i.thrash.more=!1,i.thrash.ing=!0;var r=i.thrash.at=i.batch;i.batch=null,i.batch=D(),i.batch.acks=[],i.batch.ed=0;let u=0;i.save(r,a=>{++u>1||(a&&e.log(a),r.acks.forEach(f=>f(a)),i.thrash.at=null,i.thrash.ing=!1,i.thrash.more&&i.thrash())})},i.save=(r,u)=>{let a={find:(f,n)=>{if(!(n<a.start))return a.start=n,e.store.list(a.lex),!0},lex:f=>{!f||f>a.start?(a.end=f,a.start&&a.mix(a.file||"!",a.start,a.end)):a.file=f},mix:(f,n,g)=>{a.start=a.end=a.file=t,i.parse(f,(y,m)=>{if(y)return u(y);D.map(r,(w,s)=>{if(!(s<n)){if(g&&g<s){a.start=s;return}m(s,w)}}),i.write(f,m,a.next)})},next:f=>{if(f)return u(f);if(a.start)return D.map(r,a.find);u(f)}};D.map(r,a.find)},i.write=(r,u,a)=>{o=null;let f={text:"",count:0,file:r,each:(n,g,y,m)=>{f.count++;var w=Q.encode(m.length)+"#"+Q.encode(y)+(typeof n>"u"?"":"="+Q.encode(n))+`
|
|
2
|
-
`;if(m.length===0&&
|
|
3
|
-
`&&(y[0]==="="&&(w=y[1]),typeof m<"u"&&typeof w<"u"&&a.disk(g.join(""),w),y=a.split(y[2]))}u(t,a.disk)},split:f=>{if(!f)return;let n=-1,g="",y=null;for(;(y=f[++n])&&y!==K;)g+=y;let m={};if(y)return[g,Q.decode(f.slice(n),m),f.slice(n+m.i)]}};e.store.get(r,a.read)},i};Q.encode=e=>{let t="";if(e instanceof Array&&e.length===2&&(t=me+e[1],e=e[0]),typeof e=="string"){let i=0,r=null,u=K;for(;r=e[i++];)r===K&&(u+=K);return u+'"'+e+t+K}let o=N.is(e);if(o)return K+"#"+o+t+K;if(V.is(e))return K+"+"+(e||0)+t+K;if(e===!0)return K+"+"+t+K;if(e===!1)return K+"-"+t+K;if(e===null)return K+" "+t+K};Q.decode=(e,t)=>{var o="",i=-1,r=0,u=null,a=null;if(e[0]!==K)return;for(;u=e[++i];)if(a){if(u===K&&--r<=0)break;o+=u}else u===K?r++:a=u||!0;t&&(t.i=i+1);let[f,n]=o.split(me);if(n){if(n=parseFloat(n),a==='"')return[f,n];if(a==="#")return[N.ify(f),n];if(a==="+")return f.length===0?[!0,n]:[parseFloat(f),n];if(a==="-")return[!1,n];if(a===" ")return[null,n]}else{if(a==='"')return o;if(a==="#")return N.ify(o);if(a==="+")return o.length===0?!0:parseFloat(o);if(a==="-")return!1;if(a===" ")return null}};var we=Q;var ve=typeof document>"u",G=ve?await import("node:fs"):void 0,be="",ie="",ce=ie+"+0"+ie+"#"+ie+'"root'+ie,Ne=e=>{let t=e.file;if(ve)return G.existsSync(t)||G.mkdirSync(t),G.existsSync(t+"/!")||G.writeFileSync(t+"/!",ce),{get:(o,i)=>{G.readFile(t+"/"+o,(r,u)=>{if(r){if(r.code==="ENOENT"){i();return}console.log("fs.readFile error:",r)}u&&(u=u.toString()),i(r,u)})},put:(o,i,r)=>{var u=o+"."+E.random(9)+".tmp";G.writeFile(u,i,a=>{if(a){console.log("fs.writeFile error:",a),r(a);return}G.rename(u,t+"/"+o,r)})},list:o=>{G.readdir(t,(i,r)=>{r.forEach(o),o()})}};if(e.indexedDB){let o,i=indexedDB.open(t,1);return i.onupgradeneeded=r=>{r.target.result.createObjectStore(t)},i.onerror=r=>{console.log(r)},i.onsuccess=()=>{if(o=i.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 f=o.transaction([t],"readwrite").objectStore(t).put(ce,"!");f.onerror=()=>{console.log(`error putting root on ${t}/!`)}}}}else console.log("error indexedDB not available")},{get:(r,u)=>{let a=(g,y)=>{let w=o.transaction([t],"readonly").objectStore(t).get(g);w.onerror=()=>{console.log(`error getting ${t}/${g}`)},w.onsuccess=()=>{y(null,w.result)}};if(o){a(r,u);return}let f=0,n=setInterval(()=>{if(o){clearInterval(n),a(r,u);return}f++>5&&(clearInterval(n),u("error indexedDB not available"))},1e3)},put:(r,u,a)=>{let f=(y,m,w)=>{let l=o.transaction([t],"readwrite").objectStore(t).put(m,y);l.onerror=()=>{console.log(`error putting data on ${t}/${y}`)},l.onsuccess=()=>{w(null)}};if(o){f(r,u,a);return}let n=0,g=setInterval(()=>{if(o){clearInterval(g),f(r,u,a);return}n++>5&&(clearInterval(g),a("error indexedDB not available"))},1e3)},list:r=>{let u=n=>{let y=o.transaction([t],"readonly").objectStore(t).getAllKeys();y.onerror=()=>console.log("error getting keys for",t),y.onsuccess=()=>{y.result.forEach(n),n()}};if(o){u(r);return}let a=0,f=setInterval(()=>{if(o){clearInterval(f),u(r);return}a++>5&&(clearInterval(f),console.log("error indexedDB not available"),r())},1e3)}}}return{get:(o,i)=>{i(null,ce)},put:(o,i,r)=>{r(null)},list:o=>{o("!"),o()}}},Ke=e=>{P.is(e)||(e={}),e.file=String(e.file||"radata"),e.store||(e.store=Ne(e));let t=we(e);return{get:(o,i)=>{if(!o){i("lex required");return}var r=o["#"],u=typeof o["."]=="string"?o["."]:"",a;let f=(n,g)=>{q(o["."],g)&&(a||(a={_:{"#":r,">":{}}}),a[g]=n[0],a._[">"][g]=n[1])};t(r+be+u,(n,g)=>{let y;P.is(g)?(D.map(g,f),a||f(g,u),y={[r]:a}):g&&(f(g,u),y={[r]:a}),i(n,y)})},put:(o,i)=>{if(!o){i("graph required");return}var r=0;let u=a=>{if(r--,!u.err){if(u.err=a,u.err){i(u.err);return}r===0&&i(null)}};Object.keys(o).forEach(a=>{var f=o[a];Object.keys(f).forEach(n=>{if(n==="_")return;r++;let g=f[n],y=f._[">"][n];t(a+be+n,[g,y],u)})})}}},Se=Ke;var ke=typeof document>"u",je=ke?await import("ws"):void 0;typeof globalThis.WebSocket>"u"&&(globalThis.WebSocket=je?.WebSocket);var Ie=e=>{let t=ge(e.maxAge),o=Se(e),i={},r={},u={},a=async(s,l,c)=>{for(let p of Object.keys(s)){let d=await new Promise(b=>{g({"#":p},b,l)});if(d.err)return c&&c(d.err),!1;let h=s[p],v=J;if(!(!d.put||!d.put[p]||d.put[p][v]===h[v]))return c&&c(`error in wire check public key does not match for soul: ${p}`),!1}return!0},f=(s,l)=>{let c=ue(s.get,i);c?l(JSON.stringify({"#":t.track(E.random(9)),"@":s["#"],put:c})):o.get(s.get,(p,d)=>{l(JSON.stringify({"#":t.track(E.random(9)),"@":s["#"],put:d,err:p}))})},n=async(s,l)=>{let c=await ae.mix(s.put,i,e.secure,u);if(Object.keys(c.now).length){if(!await a(c.now,l))return;o.put(c.now,p=>{l(JSON.stringify({"#":t.track(E.random(9)),"@":s["#"],err:p}))})}Object.keys(c.defer).length&&setTimeout(()=>n({put:c.defer},l),c.wait)},g=(s,l,c,p)=>{if(!l)return;P.is(p)||(p={});let d=ue(s,i),h=E.random(9),v=JSON.stringify({"#":t.track(h),get:e.secure?{"#":s["#"]}:s});if(d){c(v),l({put:d});return}o.get(s,(b,S)=>{if(S){c(v),l({put:S,err:b});return}b&&console.log(b),r[h]=l,c(v),setTimeout(()=>{let $=r[h];if($){let j=s["#"],O={[j]:null};typeof s["."]=="string"&&(O[j]={[s["."]]:null}),$({put:O}),delete r[h]}},p.wait||100)})},y=s=>({get:(l,c,p)=>{g(l,c,s,p)},put:async(l,c)=>{let p=await ae.mix(l,i,e.secure,u);Object.keys(p.now).length===0||!await a(p.now,s,c)||(o.put(p.now,c),s(JSON.stringify({"#":t.track(E.random(9)),put:l})))},on:(l,c,p,d)=>{let h=l&&l["#"];!h||!c||(u[h]?u[h].push({".":l["."],cb:c}):u[h]=[{".":l["."],cb:c}],p&&g(l,c,s,d))},off:(l,c)=>{let p=l&&l["#"];if(!(!p||!u[p]))if(c){let d=u[p].find(h=>h.cb===c);d&&u[p].splice(u[p].indexOf(d),1)}else delete u[p]}});if(ke){let s=e.wss,l=()=>s.clients();if(!s){let p=e.server?{server:e.server}:{port:e.port||8765};s=new je.WebSocketServer(p),l=()=>s.clients}let c=(p,d)=>{l().forEach(h=>{if(h&&h.readyState===WebSocket.OPEN)h.send(p,{binary:d});else{let v=0,b=setInterval(()=>{if(h&&h.readyState===WebSocket.OPEN){clearInterval(b),h.send(p,{binary:d});return}v++>5&&(clearInterval(b),console.log("websocket not available"))},1e3)}})};return s.on("connection",p=>{p.on("error",console.error),p.on("message",(d,h)=>{let v=JSON.parse(d);if(t.check(v["#"]))return;t.track(v["#"]),v.get&&f(v,c),v.put&&n(v,c),c(d,h);let b=v["@"],S=r[b];S&&(delete v["#"],delete v["@"],S(v),delete r[b])})}),y(c)}let m=[],w=s=>{m.forEach(l=>{if(l&&l.readyState===WebSocket.OPEN)l.send(s);else{let c=0,p=setInterval(()=>{if(l&&l.readyState===WebSocket.OPEN){clearInterval(p),l.send(s);return}c++>5&&(clearInterval(p),console.log("websocket not available"))},1e3)}})};return e.peers instanceof Array||(e.peers=[`ws://localhost:${e.port||8765}`]),e.peers.forEach(s=>{let l=()=>{let c=new WebSocket(s);m.push(c),c.onclose=p=>{m.indexOf(c)!==-1&&m.splice(m.indexOf(c),1),c=null,setTimeout(l,Math.floor(Math.random()*5e3))},c.onerror=p=>{console.error(p)},c.onmessage=p=>{let d=JSON.parse(p.data);if(t.check(d["#"]))return;t.track(d["#"]),d.get&&f(d,w),d.put&&n(d,w),w(p.data);let h=d["@"],v=r[h];v&&(delete d["#"],delete d["@"],v(d),delete r[h])}};l()}),y(w)},oe=Ie;var De=(e,t)=>{t||(t=oe(e));let o=[],i=!1,r=!1,u=0,a=(n,g,y,m)=>{let w=p=>{u++,a(p,g,y,m)},s=p=>{o=[],u=0,r=!1,m(p)},l=()=>{if(o.length===0){s("Wrong username or password");return}let p=o.shift();t.get({"#":p},async d=>{if(d.err){s(`error getting ${p}: ${d.err}`);return}let h=d.put&&d.put[p];if(!h||!h.auth)return l();let v=JSON.parse(h.auth),b=await I.work(g,v.salt),S=await I.decrypt(v.enc,b);if(!S)return l();if(f.is={username:n,pub:h.pub,epub:h.epub,priv:S.priv,epriv:S.epriv},y!==""){let $=E.random(64),j=await I.work(y,$),O=await I.encrypt(S,j),A={username:n,pub:h.pub,epub:h.epub,auth:JSON.stringify({enc:O,salt:$})},_=await I.sign(A,f.is),x=H(p,_.m,_.s,h.pub);t.put(x,k=>{s(k?`error putting ${A} on ${p}: ${k}`:null)});return}return s(null)},{wait:1e3})};if(u>9){s("Wrong username or password");return}let c="~@"+n;t.get({"#":c},async p=>{if(p.err){s(`error getting ${c}: ${p.err}`);return}let d=p.put&&p.put[c];if(!d)return w(n);delete p.put[c]._,o=Object.keys(d),l()},{wait:1e3})},f={create:(n,g,y)=>{let m=s=>{y?y(s):console.log(s)};if(i){m("User is already being created");return}if(n===""){m("Please provide a username");return}if(g===""){m("Please provide a password");return}i=!0;let w="~@"+n;t.get({"#":w},async s=>{if(s.err){i=!1,m(`error getting ${w}: ${s.err}`);return}if(s.put&&s.put[w]){i=!1,m("Username already exists");return}let l=E.random(64),c=await I.work(g,l),p=await I.pair(),d={priv:p.priv,epriv:p.epriv},h=await I.encrypt(d,c),v={username:n,pub:p.pub,epub:p.epub,auth:JSON.stringify({enc:h,salt:l})},b="~"+p.pub,S=await I.sign(v,p),$=H(b,S.m,S.s,p.pub);t.put($,j=>{if(i=!1,j){m(`error putting ${v} on ${b}: ${j}`);return}let O={[b]:{"#":b}};t.put(H(w,O),A=>{if(A){m(`error putting ${O} on ${w}: ${A}`);return}y&&y(null)})})},{wait:1e3})},auth:(n,g,y)=>{let m=w=>{y?y(w):w&&console.log(w)};if(r){m("User is already authenticating");return}if(f.is=null,n===""){m("Please provide a username");return}if(g===""){m("Please provide a password");return}r=!0,a(n,g,"",m)},change:(n,g,y,m)=>{let w=s=>{m?m(s):s&&console.log(s)};if(r){w("User is already authenticating");return}if(f.is=null,n===""){w("Please provide a username");return}if(g===""){w("Please provide a password");return}if(y===""){w("Please provide a new password");return}r=!0,a(n,g,y,w)},store:n=>{if(!f.is){console.log("Please authenticate before calling store");return}if(n){typeof globalThis.localStorage<"u"&&globalThis.localStorage.setItem("user.is",JSON.stringify(f.is)),typeof globalThis.sessionStorage<"u"&&globalThis.sessionStorage.removeItem("user.is");return}typeof globalThis.sessionStorage<"u"&&globalThis.sessionStorage.setItem("user.is",JSON.stringify(f.is)),typeof globalThis.localStorage<"u"&&globalThis.localStorage.removeItem("user.is")},recall:()=>{if(typeof globalThis.localStorage<"u"){let n=globalThis.localStorage.getItem("user.is");if(n){f.is=JSON.parse(n);return}}if(typeof globalThis.sessionStorage<"u"){let n=globalThis.sessionStorage.getItem("user.is");n&&(f.is=JSON.parse(n))}},leave:()=>{f.is=null,typeof globalThis.localStorage<"u"&&globalThis.localStorage.removeItem("user.is"),typeof globalThis.sessionStorage<"u"&&globalThis.sessionStorage.removeItem("user.is")},delete:(n,g,y)=>{let m=w=>{y?y(w):console.log(w)};if(r){m("User is already authenticating");return}if(n===""){m("Please provide a username");return}if(g===""){m("Please provide a password");return}r=!0,a(n,g,"",async w=>{if(w){m(w);return}let s={username:null,pub:null,epub:null,auth:null},l=await I.sign(s,f.is),c="~"+f.is.pub,p=H(c,l.m,l.s,f.is.pub);t.put(p,d=>{if(d){m(`error putting null on ${c}: ${d}`);return}f.is=null,y&&y(null)})})}};return f},$e=De;var Be=e=>{typeof e=="string"?e={peers:[e]}:e instanceof Array?e={peers:e}:P.is(e)||(e={});let t=oe(e),o=$e(null,t),i=new Map,r=new Map,u=n=>n===null||n===!0||n===!1||typeof n=="string"||N.is(n)||V.is(n),a=n=>{if(u(n))return!0;if(P.is(n)){let y=[];for(let[m,w]of Object.entries(n)){if(m==="_")return"error underscore cannot be used as a property name";if(P.is(w)||u(w)){y.push(m);continue}return typeof w>"u"?`error undefined ${m} cannot be converted to a graph`:`error ${JSON.stringify({[m]:w})} cannot be converted to a graph`}if(y.length!==0)return y}return`error ${JSON.stringify(n)} cannot be converted to a graph`},f=n=>{let g=(s,l,c,p)=>{t.get(P.put(s,"#",l),async d=>{if(d.err&&console.log(d.err),d.put&&d.put[l]){delete d.put[l]._,delete d.put[l][J],delete d.put[l][W];for(let h of Object.keys(d.put[l])){let v=N.is(d.put[l][h]);if(v){let b=await new Promise(S=>{let $=E.random();r.set($,{chain:[{item:null,soul:v}]}),f($).next(null,S)});d.put[l][h]=b}}c(d.put[l])}else c(null)},p)},y=async(s,l,c,p)=>{if(c){let d=await I.sign(l,c);return H(s,d.m,d.s,c.pub)}return e.secure?(p||(p=console.log),p(`error putting data on ${s}: user required in secure mode`),null):H(s,l)},m=s=>l=>{let c=r.get(s);c&&typeof c.cb<"u"?setTimeout(()=>c.cb(l),1):l&&console.log("error no callback for data",l,"ctx",c),c&&!c.on&&r.delete(s)},w=(s,l)=>{if(!s){console.log("error resolve request parameter required");return}let c=typeof s.get<"u",p=typeof s.put<"u",d=typeof s.on<"u",h=typeof s.off<"u",v=!1,b=r.get(n);for(var S=1;S<b.chain.length;S++)if(b.chain[S].soul===null){v=!0;break}if(v){let{item:$,soul:j}=b.chain[S-1],O=b.user||e.secure?{"#":j}:{"#":j,".":$};return t.get(O,async A=>{if(A.err){b.user||e.secure?console.log(`error getting ${j}: ${A.err}`):console.log(`error getting ${$} on ${j}: ${A.err}`),l&&l(null);return}let _=A.put&&A.put[j];if(_&&typeof _[$]<"u"){let x=N.is(_[$]);if(x)b.chain[S].soul=x,r.set(n,{...b}),c?f(n).next(null,s.get,l,s._opt):p?f(n).put(s.put,l):d?f(n).on(s.on,l,s._get,s._opt):h&&f(n).off(l);else if(c)l(_[$]);else if(p){x=E.random(),_[$]=N.ify(x);let k=await y(j,_,b.user,l);if(k===null)return;t.put(k,C=>{if(C){l(`error putting ${$} on ${j}: ${C}`);return}b.chain[S].soul=x,f(n).put(s.put,l)})}else(d||h&&l)&&l(null)}else if(p){let x=E.random();_||(_={}),_[$]=N.ify(x);let k=await y(j,_,b.user,l);if(k===null)return;t.put(k,C=>{if(C){l(`error putting ${$} on ${j}: ${C}`);return}b.chain[S].soul=x,f(n).put(s.put,l)})}else l&&l(null)}),!1}return c&&b.chain[b.chain.length-1].item!==null?(b.chain.push({item:null,soul:null}),f(n).next(null,s.get,l,s._opt),!1):b.chain[b.chain.length-1]};return{get:(s,l,c,p)=>{if(typeof l=="function"&&(p=c,c=l,l=null),s===null||s===""||s==="_"){console.log("error please provide a key"),c&&c(null);return}if(l&&typeof c!="function"){console.log("error lex requires a callback function");return}if(n=E.random(),r.set(n,{chain:[{item:s,soul:"root"}],cb:c}),!c)return f(n);let d=m(n),{soul:h}=w({get:l,_opt:p},d);h&&g(l,h,d,p)},next:(s,l,c,p)=>{let d=S=>$=>{c?c($):m(S)($)};if(typeof l=="function"&&(p=c,c=l,l=null),!n){console.log("error please provide a key using get(key)"),c&&c(null);return}let h=d(n);if(s===""||s==="_"){h(null);return}if(l&&typeof c!="function"){console.log("error lex requires a callback function");return}let v=r.get(n);if(!v)return;if(c&&typeof v.cb>"u"&&(v.cb=c,c=null),s!==null&&v.chain.push({item:s,soul:null}),!v.cb)return f(n);let{soul:b}=w({get:l,_opt:p},h);b&&g(l,b,h,p)},put:(s,l,c)=>{typeof l=="function"&&(c=l,l=!1);let p=j=>O=>{c?c(O):m(j)(O)};if(!n){c&&c("error please provide a key using get(key)");return}let d=r.get(n);if(!d)return;if(!d.cb){if(!c)return;d.cb=c,c=null}l&&(s={[E.random()]:s});let h=p(n),v=a(s);if(typeof v=="string"){h(v);return}let{item:b,soul:S}=w({put:s},h);if(!S)return;if(v===!0){let j=d.user||e.secure?{"#":S}:{"#":S,".":b};t.get(j,async O=>{if(O.err){h(`error getting ${S}: ${O.err}`);return}let A=O.put&&O.put[S],_=A&&A[b],x=N.is(_);if(!x){A||(A={}),A[b]=s;let k=await y(S,A,d.user,h);if(k===null)return;t.put(k,h);return}t.get({"#":x},async k=>{if(k.err){h(`error getting ${x}: ${k.err}`);return}if(!k.put||!k.put[x]){h(`error ${x} not found`);return}for(let B of Object.keys(k.put[x])){if(B==="_"||B===J||B===W)continue;let M=await new Promise(se=>{let pe=E.random(),Oe=[{item:B,soul:x}];r.set(pe,{chain:Oe,user:d.user}),f(pe).put(null,se)});if(M){h(M);return}}A||(A={}),A[b]=s;let C=await y(S,A,d.user,h);C!==null&&t.put(C,h)})});return}let $=d.user||e.secure?{"#":S}:{"#":S,".":b};t.get($,async j=>{if(j.err){h(`error getting ${S}.${b}: ${j.err}`);return}let O=j.put&&j.put[S],A=O&&O[b],_=N.is(A);if(!_){O||(O={}),O[b]=N.ify(E.random());let k=await y(S,O,d.user,h);if(k===null)return;t.put(k,C=>{if(C)h(`error putting ${b} on ${S}: ${C}`);else{let B=E.random(),M=[{item:b,soul:S}];r.set(B,{chain:M,user:d.user,cb:d.cb}),f(B).put(s)}});return}let x=[];for(let k of v){let C=await new Promise(B=>{if(P.is(s[k])&&!N.is(s[k])){let M=E.random(),se=[{item:k,soul:_}];r.set(M,{chain:se,user:d.user}),f(M).put(s[k],B)}else x.push(k),B(null)});if(C){h(C,n);return}}if(x.length===0){h(null);return}t.get({"#":_},async k=>{if(k.err){h(`error getting ${_}: ${k.err}`);return}let C=k.put&&k.put[_];C||(C={}),x.forEach(M=>{C[M]=s[M]});let B=await y(_,C,d.user,h);B!==null&&t.put(B,h)})})},on:(s,l,c,p)=>{if(typeof s=="function"&&(p=c,c=l,l=s,s=null),typeof l!="function"){console.log("error on() requires a callback function");return}if(!n){console.log("error please provide a key using get(key)"),l(null);return}let{item:d,soul:h}=w({on:s,_get:c,_opt:p},l);h&&(r.set(n,{chain:[{item:d,soul:h}],on:!0}),i.set(l,()=>f(n).next(null,l)),t.get({"#":h,".":d},v=>{if(v.err){console.log(`error getting ${h}.${d}: ${v.err}`);return}let b=v.put&&v.put[h]&&v.put[h][d],S=N.is(b);S?s?s=P.put(s,"#",S):s={"#":S,".":null}:s?s=P.put(s,"#",h):s={"#":h,".":d},t.on(s,i.get(l),c,p)}))},off:s=>{if(!n){console.log("error please provide a key using get(key)"),s&&s(null);return}let{item:l,soul:c}=w({off:!0},s);c&&t.get({"#":c,".":l},p=>{if(p.err){console.log(`error getting ${c}.${l}: ${p.err}`);return}let d=p.put&&p.put[c]&&p.put[c][l],h=N.is(d);h?t.off({"#":h},i.get(s)):t.off({"#":c},i.get(s)),i.delete(s),r.delete(n)})},user:()=>(o.get||(Object.assign(o,f()),o.get=(s,l,c,p)=>{typeof l=="function"&&(p=c,c=l,l=null);let d=null,h=null;if(o.is&&(d=o.is.pub),typeof s=="string"?h=s:s instanceof Array&&(s.length===2?(d=s[0],h=s[1]):s.length===1&&(h=s[0])),!d){console.log("error please log in or provide a public key"),c&&c(null);return}if(h===null||h===""||h==="_"){console.log("error please provide a key"),c&&c(null);return}if(l&&!c){console.log("error lex requires a callback function");return}n=E.random();let v=[{item:h,soul:"~"+d}];if(r.set(n,{chain:v,user:o.is,cb:c}),!c)return f(n);let b=m(n),{soul:S}=w({get:l,_opt:p},b);S&&g(l,S,b,p)}),o),wire:t,SEA:I}};return f()},gt=Be;export{gt as default};
|
|
1
|
+
var V={is:e=>!(e instanceof Array)&&(e-parseFloat(e)+1>=0||e===1/0||e===-1/0)},P={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 i=Object.keys(e);for(let r=0;r<i.length;r++){let u=t(e[i[r]],i[r],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}},Ae=(e,t,o)=>{if(o.id){o.id=!1;return}if(t==="#"&&typeof e=="string"){o.id=e;return}o.id=!1},N={is:e=>{if(e&&e["#"]&&!e._&&P.is(e)){let t={};if(P.map(e,Ae,t),t.id)return t.id}return!1},ify:e=>P.put({},"#",e)},W="_holster_user_signature",B="_holster_user_public_key",H=(e,t,o,i)=>{let r={[e]:{_:{"#":e,">":{}}}};for(let[u,f]of Object.entries(t))u!=="_"&&u!=B&&u!=W&&(r[e][u]=f,r[e]._[">"][u]=Date.now());return o&&i&&(r[e][W]=o,r[e]._[">"][W]=Date.now(),r[e][B]=i,r[e]._[">"][B]=Date.now()),r},q=(e,t)=>{if(typeof t>"u")return e===null;if(typeof e>"u")return!0;if(typeof e=="string")return e===t;if(!P.is(e)||!t)return!1;let o=e["*"];if(o)return t.slice(0,o.length)===o;let i=e[">"],r=e["<"];return i&&r?t>=i&&t<=r:i?t>=i:r?t<=r:!1},E={random:e=>{var t="";let o="0123456789ABCDEFGHIJKLMNOPQRSTUVWXZabcdefghijklmnopqrstuvwxyz";e||(e=24);for(let i=0;i<e;i++)t+=o.charAt(Math.floor(Math.random()*o.length));return t}};var _e=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 i=Date.now();Object.keys(t.store).forEach(r=>{i-t.store[r]>e&&delete t.store[r]}),t.expiry=null},e)),o),t},ge=_e;var xe=(e,t)=>{let o=e["#"];if(!t[o])return;let i={_:{"#":o,">":{}}};if(typeof e["."]=="string"){let r=e["."];if(typeof t[o][r]>"u")return;i[r]=t[o][r],i._[">"][r]=t[o]._[">"][r]}else for(let r of Object.keys(t[o]))q(e["."],r)&&(i[r]=t[o][r],i._[">"][r]=t[o]._[">"][r]);return{[o]:i}},ue=xe;typeof btoa>"u"&&(globalThis.btoa=e=>Buffer.from(e,"binary").toString("base64"),globalThis.atob=e=>Buffer.from(e,"base64").toString("binary"));function ee(){}Object.assign(ee,{from:Array.from});ee.prototype=Object.create(Array.prototype);ee.prototype.toString=function(e,t,o){e||(e="utf8"),t||(t=0);let i=this.length;if(e==="hex"){let r=new Uint8Array(this);return[...Array((o&&o+1||i)-t).keys()].map(u=>r[u+t].toString(16).padStart(2,"0")).join("")}if(e==="utf8")return Array.from({length:(o||i)-t},(r,u)=>String.fromCharCode(this[u+t])).join("");if(e==="base64")return btoa(this)};var R=ee;function L(...e){return console.warn("new SafeBuffer() is deprecated, please use SafeBuffer.from()"),L.from(...e)}L.prototype=Object.create(Array.prototype);Object.assign(L,{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 i=arguments[1]||"utf8";if(i==="hex"){let r=e.match(/([\da-fA-F]{2})/g).map(u=>parseInt(u,16));if(!r||!r.length)throw new TypeError("Invalid first argument for type 'hex'.");t=R.from(r)}else if(i==="utf8"||i==="binary"){let r=e.length,u=new Uint16Array(r);Array.from({length:r},(f,p)=>u[p]=e.charCodeAt(p)),t=R.from(u)}else if(i==="base64"){let r=atob(e),u=r.length,f=new Uint8Array(u);Array.from({length:u},(p,n)=>f[n]=r.charCodeAt(n)),t=R.from(f)}else console.info("SafeBuffer.from unknown encoding: "+i);return t}if(e.byteLength?e.byteLength:e.length){let i;return e instanceof ArrayBuffer&&(i=new Uint8Array(e)),R.from(i||e)}},alloc(e,t=0){return R.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 R.from(e.reduce((t,o)=>t.concat(Array.from(o)),[]))}});L.prototype.from=L.from;L.prototype.toString=R.prototype.toString;var J=L;var Ee=typeof document>"u",de=Ee?(await import("node:crypto")).webcrypto:globalThis.crypto,T=de.subtle,te=e=>typeof e=="string"?e:JSON.stringify(e),Z=e=>{try{return JSON.parse(e)}catch{return e}},re=e=>{let t=new Uint8Array(J.alloc(e));return J.from(de.getRandomValues(t))},Y=(e,t)=>{let[o,i]=e.split(".");return{kty:"EC",crv:"P-256",x:o,y:i,d:t,ext:!0,key_ops:t?["sign"]:["verify"]}},ne=async e=>{let t=await T.digest({name:"SHA-256"},new TextEncoder().encode(te(e)));return J.from(t)},le=async(e,t)=>{let o=e+t.toString("utf8"),i=J.from(await ne(o),"binary"),r=Te(i);return await T.importKey("jwk",r,{name:"AES-GCM"},!1,["encrypt","decrypt"])},Te=e=>({kty:"oct",k:e.toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/\=/g,""),ext:!1,alg:"A256GCM"});var Pe={pair:async e=>{let t=await T.generateKey({name:"ECDSA",namedCurve:"P-256"},!0,["sign","verify"]).then(async r=>{let u=await T.exportKey("jwk",r.publicKey);return{priv:(await T.exportKey("jwk",r.privateKey)).d,pub:u.x+"."+u.y}}),o=await T.generateKey({name:"ECDH",namedCurve:"P-256"},!0,["deriveKey"]).then(async r=>{let u=await T.exportKey("jwk",r.publicKey);return{epriv:(await T.exportKey("jwk",r.privateKey)).d,epub:u.x+"."+u.y}}),i={pub:t.pub,priv:t.priv,epub:o.epub,epriv:o.epriv};return e&&e(i),i},encrypt:async(e,t,o)=>{if(!t||!t.epriv)return o&&o(null),null;let i={s:re(9),iv:re(15)},r=await le(t.epriv,i.s).then(f=>T.encrypt({name:"AES-GCM",iv:new Uint8Array(i.iv)},f,new TextEncoder().encode(te(e)))),u={ct:J.from(r,"binary").toString("base64"),iv:i.iv.toString("base64"),s:i.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 i={ct:J.from(e.ct,"base64"),iv:J.from(e.iv,"base64"),s:J.from(e.s,"base64")};try{let r=await le(t.epriv,i.s).then(f=>T.decrypt({name:"AES-GCM",iv:new Uint8Array(i.iv),tagLength:128},f,new Uint8Array(i.ct))),u=Z(new TextDecoder("utf8").decode(r));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 i=Z(e),r=await T.importKey("jwk",Y(t.pub),{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]),u={};if(typeof i.m=="string")u=i.m;else for(let g of Object.keys(i.m).sort())g!=="_"&&g!=B&&g!=W&&(u[g]=i.m[g]);let f=await ne(u),p=new Uint8Array(J.from(i.s,"base64")),n={name:"ECDSA",hash:{name:"SHA-256"}};if(await T.verify(n,r,p,new Uint8Array(f))){let g=Z(i.m);return o&&o(g),g}return o&&o(null),null},sign:async(e,t,o)=>{if(!t||!t.pub||!t.priv)return o&&o(null),null;let i={};if(typeof e=="string")i=e;else{let g=Z(e);for(let y of Object.keys(g).sort())y!=="_"&&y!=B&&y!=W&&(i[y]=g[y])}let r=await ne(i),u=Y(t.pub,t.priv),f={name:"ECDSA",namedCurve:"P-256"},p=await T.importKey("jwk",u,f,!1,["sign"]).then(g=>T.sign({name:"ECDSA",hash:{name:"SHA-256"}},g,new Uint8Array(r))),n={m:i,s:J.from(p,"binary").toString("base64")};return o&&o(n),n},work:async(e,t,o)=>{typeof t=="function"&&(o=t,t=void 0),typeof t>"u"&&(t=re(9));let i=await T.importKey("raw",new TextEncoder().encode(te(e)),{name:"PBKDF2"},!1,["deriveBits"]),r={name:"PBKDF2",iterations:1e5,salt:new TextEncoder().encode(t),hash:{name:"SHA-256"}},u=await T.deriveBits(r,i,512),f={epriv:J.from(u,"binary").toString("base64")};return o&&o(f),f},secret:async(e,t,o)=>{if(!e||!e.epub||!t||!t.epub||!t.epriv)return o&&o(null),null;let i={name:"ECDH",namedCurve:"P-256"},r=Y(e.epub),u=await T.importKey("jwk",r,i,!0,[]),f=Y(t.epub,t.epriv,!1);delete f.key_ops;let p=await T.importKey("jwk",f,i,!1,["deriveBits"]).then(async n=>{let g=await T.deriveBits({public:u,name:"ECDH",namedCurve:"P-256"},n,256),y=await T.importKey("raw",new Uint8Array(g),{name:"AES-GCM",length:256},!0,["encrypt","decrypt"]);return T.exportKey("jwk",y).then(({k:m})=>m)});return o&&o({epriv:p}),{epriv:p}}},I=Pe;var fe=(e,t,o,i)=>e<t?{historical:!0}:e>t?{incoming:!0}:(typeof o!="string"&&(o=JSON.stringify(o)||""),typeof i!="string"&&(i=JSON.stringify(i)||""),o===i?{state:!0}:o<i?{current:!0}:{incoming:!0});fe.mix=async(e,t,o,i)=>{let r=Date.now(),u={},f={},p=0;for(let n of Object.keys(e)){let g=e[n],y=!1,m=!1,w=0,s=o;if(!g||!g._)continue;let l=g[W],a=g[B];if(l&&a&&(s=!0),n.length>1&&n[0]==="~")if(n[1]==="@")m=!0,s=!1;else{if(a&&n!="~"+a){console.log(`error public key does not match for soul: ${n}`);continue}s=!0}if(!(s&&(!l||!a||!await I.verify({m:g,s:l},{pub:a})))){for(let c of Object.keys(g)){if(c==="_")continue;let d=g[c],h=g._&&g._[">"]?g._[">"][c]:0,v=(t[n]||{})[c],b=(t[n]||{_:{">":{}}})._[">"][c]||0;if(m&&c!==N.is(d)){console.log(`error alias ${m}: ${c} !== ${N.is(d)}`);continue}let S=h-r;if(S>0){if(S>864e5)continue;(p===0||S<p)&&(p=w=S),f[n]||(f[n]={_:{"#":n,">":{}}}),f[n][c]=d,f[n]._[">"][c]=h}else fe(h,b,d,v).incoming&&(u[n]||(u[n]={_:{"#":n,">":{}}}),t[n]||(t[n]={_:{"#":n,">":{}}}),t[n][c]=u[n][c]=d,t[n]._[">"][c]=u[n]._[">"][c]=h,i[n]&&setTimeout(()=>{i[n]&&i[n].filter(j=>q(j["."],c)).forEach(j=>j.cb())},100),y=!0)}s&&w!==0&&u[n]&&(Object.assign(f[n],u[n]),delete u[n]),y&&i[n]&&setTimeout(()=>{i[n]&&i[n].filter(c=>q(c["."])).forEach(c=>c.cb())},100)}}return{now:u,defer:f,wait:p}};var ae=fe;var F="",X="",ye=()=>{let e=(t,o,i)=>{if(i||(e[F]||(e[F]={}),i=e[F]),!t)return i;let r=0,u={},f=t[r],p=t.length-1,n=typeof o>"u",g=i[f];for(;!g&&r<p;)f+=t[++r],g=i[f];if(g)if(r===p){if(n)return typeof g[X]>"u"?g[F]:g[X];g[X]=o}else return!g[F]&&!n&&(g[F]={}),e(t.slice(++r),o,g[F]);else if(P.map(i,(m,w)=>{let s=0,l="";for(;w[s]===t[s];)l+=w[s++];if(l){if(n)return s<=p?void 0:(u[w.slice(s)]=m,m);let a={[w.slice(s)]:m,[t.slice(s)]:{[X]:o}};return i[l]={[F]:a},delete i[w],!0}})){if(n)return u}else{if(n)return;i[f]||(i[f]={}),i[f][X]=o}};return e};ye.map=function e(t,o,i,r){r||(r=[]);var u=t[F]||t,f=Object.keys(u).sort(),p;for(let n=0;n<f.length;n++){let g=f[n],y=u[g],m=y[X];if(typeof m<"u"){if(m=o(m,r.join("")+g,g,r),typeof m<"u")return m}else i&&o(p,r.join(""),g,r);if(y[F]){if(r.push(g),m=e(y[F],o,i,r),typeof m<"u")return m;r.pop()}}};var U=ye;var me="",he="",K="",Q=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 i=(r,u,f)=>{if(r=""+r,typeof u=="function")return f=u,u=i.batch(r),typeof u<"u"||i.thrash.at&&(u=i.thrash.at(r),typeof u<"u")?f(t,u):i.read(r,f);if(i.batch(r,u),f&&i.batch.acks.push(f),++i.batch.ed>=e.batch)return i.thrash();clearTimeout(i.batch.timeout),i.batch.timeout=setTimeout(i.thrash,e.write)};return i.batch=U(),i.batch.acks=[],i.batch.ed=0,i.thrash=()=>{if(i.thrash.ing)return i.thrash.more=!0;clearTimeout(i.batch.timeout),i.thrash.more=!1,i.thrash.ing=!0;var r=i.thrash.at=i.batch;i.batch=null,i.batch=U(),i.batch.acks=[],i.batch.ed=0;let u=0;i.save(r,f=>{++u>1||(f&&e.log(f),r.acks.forEach(p=>p(f)),i.thrash.at=null,i.thrash.ing=!1,i.thrash.more&&i.thrash())})},i.save=(r,u)=>{let f={find:(p,n)=>{if(!(n<f.start))return f.start=n,e.store.list(f.lex),!0},lex:p=>{!p||p>f.start?(f.end=p,f.start&&f.mix(f.file||"!",f.start,f.end)):f.file=p},mix:(p,n,g)=>{f.start=f.end=f.file=t,i.parse(p,(y,m)=>{if(y)return u(y);U.map(r,(w,s)=>{if(!(s<n)){if(g&&g<s){f.start=s;return}m(s,w)}}),i.write(p,m,f.next)})},next:p=>{if(p)return u(p);if(f.start)return U.map(r,f.find);u(p)}};U.map(r,f.find)},i.write=(r,u,f)=>{o=null;let p={text:"",limit:"",done:!1,count:0,each:(n,g,y,m)=>{if(p.done)return;p.count++,n=typeof n>"u"?"":"="+Q.encode(n);let w=Q.encode(m.length)+"#"+Q.encode(y)+n+`
|
|
2
|
+
`;if(p.count>1&&m.length===0&&p.text.length+w.length>e.size){let s=y.indexOf(he);p.limit=s===-1?y:y.substring(0,s),p.done=!0,p.sub=U(),U.map(u,p.slice),i.write(p.limit,p.sub,f);return}p.text+=w},slice:(n,g)=>{g<p.limit||p.sub(g,n)}};U.map(u,p.each,!0),e.store.put(r,p.text,f)},i.read=(r,u)=>{if(o){let g=o(r);if(typeof g<"u")return u(t,g)}let f=r.indexOf(he),p=f===-1?r:r.substring(0,f),n={lex:g=>{if(!g){if(!n.file){u("no file found",t);return}i.parse(n.file,n.it);return}g>p||g<n.file||(n.file=g)},it:(g,y)=>{g&&e.log(g),y&&(o=y,n.value=y(r)),u(g,n.value)}};e.store.list(n.lex)},i.parse=(r,u)=>{let f={disk:U(),read:(p,n)=>{if(p)return u(p);if(!n)return u(t,f.disk);let g=[],y=f.split(n);for(;y;){let m,w,s=y[1];y=f.split(y[2])||"",y[0]==="#"&&(m=y[1],g=g.slice(0,s),s<=g.length&&g.push(m)),y=f.split(y[2])||"",y[0]!==`
|
|
3
|
+
`&&(y[0]==="="&&(w=y[1]),typeof m<"u"&&typeof w<"u"&&f.disk(g.join(""),w),y=f.split(y[2]))}u(t,f.disk)},split:p=>{if(!p)return;let n=-1,g="",y=null;for(;(y=p[++n])&&y!==K;)g+=y;let m={};if(y)return[g,Q.decode(p.slice(n),m),p.slice(n+m.i)]}};e.store.get(r,f.read)},i};Q.encode=e=>{let t="";if(e instanceof Array&&e.length===2&&(t=me+e[1],e=e[0]),typeof e=="string"){let i=0,r=null,u=K;for(;r=e[i++];)r===K&&(u+=K);return u+'"'+e+t+K}let o=N.is(e);if(o)return K+"#"+o+t+K;if(V.is(e))return K+"+"+(e||0)+t+K;if(e===!0)return K+"+"+t+K;if(e===!1)return K+"-"+t+K;if(e===null)return K+" "+t+K};Q.decode=(e,t)=>{var o="",i=-1,r=0,u=null,f=null;if(e[0]!==K)return;for(;u=e[++i];)if(f){if(u===K&&--r<=0)break;o+=u}else u===K?r++:f=u||!0;t&&(t.i=i+1);let[p,n]=o.split(me);if(n){if(n=parseFloat(n),f==='"')return[p,n];if(f==="#")return[N.ify(p),n];if(f==="+")return p.length===0?[!0,n]:[parseFloat(p),n];if(f==="-")return[!1,n];if(f===" ")return[null,n]}else{if(f==='"')return o;if(f==="#")return N.ify(o);if(f==="+")return o.length===0?!0:parseFloat(o);if(f==="-")return!1;if(f===" ")return null}};var we=Q;var ve=typeof document>"u",G=ve?await import("node:fs"):void 0,be="",ie="",ce=ie+"+0"+ie+"#"+ie+'"root'+ie,Ne=e=>{let t=e.file;if(ve)return G.existsSync(t)||G.mkdirSync(t),G.existsSync(t+"/!")||G.writeFileSync(t+"/!",ce),{get:(o,i)=>{G.readFile(t+"/"+o,(r,u)=>{if(r){if(r.code==="ENOENT"){i();return}console.log("fs.readFile error:",r)}u&&(u=u.toString()),i(r,u)})},put:(o,i,r)=>{var u=o+"."+E.random(9)+".tmp";G.writeFile(u,i,f=>{if(f){console.log("fs.writeFile error:",f),r(f);return}G.rename(u,t+"/"+o,r)})},list:o=>{G.readdir(t,(i,r)=>{r.forEach(o),o()})}};if(e.indexedDB){let o,i=indexedDB.open(t,1);return i.onupgradeneeded=r=>{r.target.result.createObjectStore(t)},i.onerror=r=>{console.log(r)},i.onsuccess=()=>{if(o=i.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 p=o.transaction([t],"readwrite").objectStore(t).put(ce,"!");p.onerror=()=>{console.log(`error putting root on ${t}/!`)}}}}else console.log("error indexedDB not available")},{get:(r,u)=>{let f=(g,y)=>{let w=o.transaction([t],"readonly").objectStore(t).get(g);w.onerror=()=>{console.log(`error getting ${t}/${g}`)},w.onsuccess=()=>{y(null,w.result)}};if(o){f(r,u);return}let p=0,n=setInterval(()=>{if(o){clearInterval(n),f(r,u);return}p++>5&&(clearInterval(n),u("error indexedDB not available"))},1e3)},put:(r,u,f)=>{let p=(y,m,w)=>{let l=o.transaction([t],"readwrite").objectStore(t).put(m,y);l.onerror=()=>{console.log(`error putting data on ${t}/${y}`)},l.onsuccess=()=>{w(null)}};if(o){p(r,u,f);return}let n=0,g=setInterval(()=>{if(o){clearInterval(g),p(r,u,f);return}n++>5&&(clearInterval(g),f("error indexedDB not available"))},1e3)},list:r=>{let u=n=>{let y=o.transaction([t],"readonly").objectStore(t).getAllKeys();y.onerror=()=>console.log("error getting keys for",t),y.onsuccess=()=>{y.result.forEach(n),n()}};if(o){u(r);return}let f=0,p=setInterval(()=>{if(o){clearInterval(p),u(r);return}f++>5&&(clearInterval(p),console.log("error indexedDB not available"),r())},1e3)}}}return{get:(o,i)=>{i(null,ce)},put:(o,i,r)=>{r(null)},list:o=>{o("!"),o()}}},Ke=e=>{P.is(e)||(e={}),e.file=String(e.file||"radata"),e.store||(e.store=Ne(e));let t=we(e);return{get:(o,i)=>{if(!o){i("lex required");return}var r=o["#"],u=typeof o["."]=="string"?o["."]:"",f;let p=(n,g)=>{q(o["."],g)&&(f||(f={_:{"#":r,">":{}}}),f[g]=n[0],f._[">"][g]=n[1])};t(r+be+u,(n,g)=>{let y;P.is(g)?(U.map(g,p),f||p(g,u),y={[r]:f}):g&&(p(g,u),y={[r]:f}),i(n,y)})},put:(o,i)=>{if(!o){i("graph required");return}var r=0;let u=f=>{if(r--,!u.err){if(u.err=f,u.err){i(u.err);return}r===0&&i(null)}};Object.keys(o).forEach(f=>{var p=o[f];Object.keys(p).forEach(n=>{if(n==="_")return;r++;let g=p[n],y=p._[">"][n];t(f+be+n,[g,y],u)})})}}},Se=Ke;var ke=typeof document>"u",je=ke?await import("ws"):void 0;typeof globalThis.WebSocket>"u"&&(globalThis.WebSocket=je?.WebSocket);var Ie=e=>{let t=ge(e.maxAge),o=Se(e),i={},r={},u={},f=async(s,l,a)=>{for(let c of Object.keys(s)){let d=await new Promise(b=>{g({"#":c},b,l)});if(d.err)return a&&a(d.err),!1;let h=s[c],v=B;if(!(!d.put||!d.put[c]||d.put[c][v]===h[v]))return a&&a(`error in wire check public key does not match for soul: ${c}`),!1}return!0},p=(s,l)=>{let a=ue(s.get,i);a?l(JSON.stringify({"#":t.track(E.random(9)),"@":s["#"],put:a})):o.get(s.get,(c,d)=>{l(JSON.stringify({"#":t.track(E.random(9)),"@":s["#"],put:d,err:c}))})},n=async(s,l)=>{let a=await ae.mix(s.put,i,e.secure,u);if(Object.keys(a.now).length){if(!await f(a.now,l))return;o.put(a.now,c=>{l(JSON.stringify({"#":t.track(E.random(9)),"@":s["#"],err:c}))})}Object.keys(a.defer).length&&setTimeout(()=>n({put:a.defer},l),a.wait)},g=(s,l,a,c)=>{if(!l)return;P.is(c)||(c={});let d=ue(s,i),h=E.random(9),v=JSON.stringify({"#":t.track(h),get:e.secure?{"#":s["#"]}:s});if(d){a(v),l({put:d});return}o.get(s,(b,S)=>{if(S){a(v),l({put:S,err:b});return}b&&console.log(b),r[h]=l,a(v),setTimeout(()=>{let $=r[h];if($){let j=s["#"],O={[j]:null};typeof s["."]=="string"&&(O[j]={[s["."]]:null}),$({put:O}),delete r[h]}},c.wait||100)})},y=s=>({get:(l,a,c)=>{g(l,a,s,c)},put:async(l,a)=>{let c=await ae.mix(l,i,e.secure,u);Object.keys(c.now).length===0||!await f(c.now,s,a)||(o.put(c.now,a),s(JSON.stringify({"#":t.track(E.random(9)),put:l})))},on:(l,a,c,d)=>{let h=l&&l["#"];!h||!a||(u[h]?u[h].push({".":l["."],cb:a}):u[h]=[{".":l["."],cb:a}],c&&g(l,a,s,d))},off:(l,a)=>{let c=l&&l["#"];if(!(!c||!u[c]))if(a){let d=u[c].find(h=>h.cb===a);d&&u[c].splice(u[c].indexOf(d),1)}else delete u[c]}});if(ke){let s=e.wss,l=()=>s.clients();if(!s){let c=e.server?{server:e.server}:{port:e.port||8765};s=new je.WebSocketServer(c),l=()=>s.clients}let a=(c,d)=>{l().forEach(h=>{if(h&&h.readyState===WebSocket.OPEN)h.send(c,{binary:d});else{let v=0,b=setInterval(()=>{if(h&&h.readyState===WebSocket.OPEN){clearInterval(b),h.send(c,{binary:d});return}v++>5&&(clearInterval(b),console.log("websocket not available"))},1e3)}})};return s.on("connection",c=>{c.on("error",console.error),c.on("message",(d,h)=>{let v=JSON.parse(d);if(t.check(v["#"]))return;t.track(v["#"]),v.get&&p(v,a),v.put&&n(v,a),a(d,h);let b=v["@"],S=r[b];S&&(delete v["#"],delete v["@"],S(v),delete r[b])})}),y(a)}let m=[],w=s=>{m.forEach(l=>{if(l&&l.readyState===WebSocket.OPEN)l.send(s);else{let a=0,c=setInterval(()=>{if(l&&l.readyState===WebSocket.OPEN){clearInterval(c),l.send(s);return}a++>5&&(clearInterval(c),console.log("websocket not available"))},1e3)}})};return e.peers instanceof Array||(e.peers=[`ws://localhost:${e.port||8765}`]),e.peers.forEach(s=>{let l=()=>{let a=new WebSocket(s);m.push(a),a.onclose=c=>{m.indexOf(a)!==-1&&m.splice(m.indexOf(a),1),a=null,setTimeout(l,Math.floor(Math.random()*5e3))},a.onerror=c=>{console.error(c)},a.onmessage=c=>{let d=JSON.parse(c.data);if(t.check(d["#"]))return;t.track(d["#"]),d.get&&p(d,w),d.put&&n(d,w),w(c.data);let h=d["@"],v=r[h];v&&(delete d["#"],delete d["@"],v(d),delete r[h])}};l()}),y(w)},oe=Ie;var De=(e,t)=>{t||(t=oe(e));let o=[],i=!1,r=!1,u=0,f=(n,g,y,m)=>{let w=c=>{u++,f(c,g,y,m)},s=c=>{o=[],u=0,r=!1,m(c)},l=()=>{if(o.length===0){s("Wrong username or password");return}let c=o.shift();t.get({"#":c},async d=>{if(d.err){s(`error getting ${c}: ${d.err}`);return}let h=d.put&&d.put[c];if(!h||!h.auth)return l();let v=JSON.parse(h.auth),b=await I.work(g,v.salt),S=await I.decrypt(v.enc,b);if(!S)return l();if(p.is={username:n,pub:h.pub,epub:h.epub,priv:S.priv,epriv:S.epriv},y!==""){let $=E.random(64),j=await I.work(y,$),O=await I.encrypt(S,j),A={username:n,pub:h.pub,epub:h.epub,auth:JSON.stringify({enc:O,salt:$})},_=await I.sign(A,p.is),x=H(c,_.m,_.s,h.pub);t.put(x,k=>{s(k?`error putting ${A} on ${c}: ${k}`:null)});return}return s(null)},{wait:1e3})};if(u>9){s("Wrong username or password");return}let a="~@"+n;t.get({"#":a},async c=>{if(c.err){s(`error getting ${a}: ${c.err}`);return}let d=c.put&&c.put[a];if(!d)return w(n);delete c.put[a]._,o=Object.keys(d),l()},{wait:1e3})},p={create:(n,g,y)=>{let m=s=>{y?y(s):console.log(s)};if(i){m("User is already being created");return}if(n===""){m("Please provide a username");return}if(g===""){m("Please provide a password");return}i=!0;let w="~@"+n;t.get({"#":w},async s=>{if(s.err){i=!1,m(`error getting ${w}: ${s.err}`);return}if(s.put&&s.put[w]){i=!1,m("Username already exists");return}let l=E.random(64),a=await I.work(g,l),c=await I.pair(),d={priv:c.priv,epriv:c.epriv},h=await I.encrypt(d,a),v={username:n,pub:c.pub,epub:c.epub,auth:JSON.stringify({enc:h,salt:l})},b="~"+c.pub,S=await I.sign(v,c),$=H(b,S.m,S.s,c.pub);t.put($,j=>{if(i=!1,j){m(`error putting ${v} on ${b}: ${j}`);return}let O={[b]:{"#":b}};t.put(H(w,O),A=>{if(A){m(`error putting ${O} on ${w}: ${A}`);return}y&&y(null)})})},{wait:1e3})},auth:(n,g,y)=>{let m=w=>{y?y(w):w&&console.log(w)};if(r){m("User is already authenticating");return}if(p.is=null,n===""){m("Please provide a username");return}if(g===""){m("Please provide a password");return}r=!0,f(n,g,"",m)},change:(n,g,y,m)=>{let w=s=>{m?m(s):s&&console.log(s)};if(r){w("User is already authenticating");return}if(p.is=null,n===""){w("Please provide a username");return}if(g===""){w("Please provide a password");return}if(y===""){w("Please provide a new password");return}r=!0,f(n,g,y,w)},store:n=>{if(!p.is){console.log("Please authenticate before calling store");return}if(n){typeof globalThis.localStorage<"u"&&globalThis.localStorage.setItem("user.is",JSON.stringify(p.is)),typeof globalThis.sessionStorage<"u"&&globalThis.sessionStorage.removeItem("user.is");return}typeof globalThis.sessionStorage<"u"&&globalThis.sessionStorage.setItem("user.is",JSON.stringify(p.is)),typeof globalThis.localStorage<"u"&&globalThis.localStorage.removeItem("user.is")},recall:()=>{if(typeof globalThis.localStorage<"u"){let n=globalThis.localStorage.getItem("user.is");if(n){p.is=JSON.parse(n);return}}if(typeof globalThis.sessionStorage<"u"){let n=globalThis.sessionStorage.getItem("user.is");n&&(p.is=JSON.parse(n))}},leave:()=>{p.is=null,typeof globalThis.localStorage<"u"&&globalThis.localStorage.removeItem("user.is"),typeof globalThis.sessionStorage<"u"&&globalThis.sessionStorage.removeItem("user.is")},delete:(n,g,y)=>{let m=w=>{y?y(w):console.log(w)};if(r){m("User is already authenticating");return}if(n===""){m("Please provide a username");return}if(g===""){m("Please provide a password");return}r=!0,f(n,g,"",async w=>{if(w){m(w);return}let s={username:null,pub:null,epub:null,auth:null},l=await I.sign(s,p.is),a="~"+p.is.pub,c=H(a,l.m,l.s,p.is.pub);t.put(c,d=>{if(d){m(`error putting null on ${a}: ${d}`);return}p.is=null,y&&y(null)})})}};return p},$e=De;var Be=e=>{typeof e=="string"?e={peers:[e]}:e instanceof Array?e={peers:e}:P.is(e)||(e={});let t=oe(e),o=$e(null,t),i=new Map,r=new Map,u=n=>n===null||n===!0||n===!1||typeof n=="string"||N.is(n)||V.is(n),f=n=>{if(u(n))return!0;if(P.is(n)){let y=[];for(let[m,w]of Object.entries(n)){if(m==="_")return"error underscore cannot be used as a property name";if(P.is(w)||u(w)){y.push(m);continue}return typeof w>"u"?`error undefined ${m} cannot be converted to a graph`:`error ${JSON.stringify({[m]:w})} cannot be converted to a graph`}if(y.length!==0)return y}return`error ${JSON.stringify(n)} cannot be converted to a graph`},p=n=>{let g=(s,l,a,c)=>{t.get(P.put(s,"#",l),async d=>{if(d.err&&console.log(d.err),d.put&&d.put[l]){delete d.put[l]._,delete d.put[l][B],delete d.put[l][W];for(let h of Object.keys(d.put[l])){let v=N.is(d.put[l][h]);if(v){let b=await new Promise(S=>{let $=E.random();r.set($,{chain:[{item:null,soul:v}]}),p($).next(null,S)});d.put[l][h]=b}}a(d.put[l])}else a(null)},c)},y=async(s,l,a,c)=>{if(a){let d=await I.sign(l,a);return H(s,d.m,d.s,a.pub)}return e.secure?(c||(c=console.log),c(`error putting data on ${s}: user required in secure mode`),null):H(s,l)},m=s=>l=>{let a=r.get(s);a&&typeof a.cb<"u"?setTimeout(()=>a.cb(l),1):l&&console.log("error no callback for data",l,"ctx",a),a&&!a.on&&r.delete(s)},w=(s,l)=>{if(!s){console.log("error resolve request parameter required");return}let a=typeof s.get<"u",c=typeof s.put<"u",d=typeof s.on<"u",h=typeof s.off<"u",v=!1,b=r.get(n);for(var S=1;S<b.chain.length;S++)if(b.chain[S].soul===null){v=!0;break}if(v){let{item:$,soul:j}=b.chain[S-1],O=b.user||e.secure?{"#":j}:{"#":j,".":$};return t.get(O,async A=>{if(A.err){b.user||e.secure?console.log(`error getting ${j}: ${A.err}`):console.log(`error getting ${$} on ${j}: ${A.err}`),l&&l(null);return}let _=A.put&&A.put[j];if(_&&typeof _[$]<"u"){let x=N.is(_[$]);if(x)b.chain[S].soul=x,r.set(n,{...b}),a?p(n).next(null,s.get,l,s._opt):c?p(n).put(s.put,l):d?p(n).on(s.on,l,s._get,s._opt):h&&p(n).off(l);else if(a)l(_[$]);else if(c){x=E.random(),_[$]=N.ify(x);let k=await y(j,_,b.user,l);if(k===null)return;t.put(k,C=>{if(C){l(`error putting ${$} on ${j}: ${C}`);return}b.chain[S].soul=x,p(n).put(s.put,l)})}else(d||h&&l)&&l(null)}else if(c){let x=E.random();_||(_={}),_[$]=N.ify(x);let k=await y(j,_,b.user,l);if(k===null)return;t.put(k,C=>{if(C){l(`error putting ${$} on ${j}: ${C}`);return}b.chain[S].soul=x,p(n).put(s.put,l)})}else l&&l(null)}),!1}return a&&b.chain[b.chain.length-1].item!==null?(b.chain.push({item:null,soul:null}),p(n).next(null,s.get,l,s._opt),!1):b.chain[b.chain.length-1]};return{get:(s,l,a,c)=>{if(typeof l=="function"&&(c=a,a=l,l=null),s===null||s===""||s==="_"){console.log("error please provide a key"),a&&a(null);return}if(l&&typeof a!="function"){console.log("error lex requires a callback function");return}if(n=E.random(),r.set(n,{chain:[{item:s,soul:"root"}],cb:a}),!a)return p(n);let d=m(n),{soul:h}=w({get:l,_opt:c},d);h&&g(l,h,d,c)},next:(s,l,a,c)=>{let d=S=>$=>{a?a($):m(S)($)};if(typeof l=="function"&&(c=a,a=l,l=null),!n){console.log("error please provide a key using get(key)"),a&&a(null);return}let h=d(n);if(s===""||s==="_"){h(null);return}if(l&&typeof a!="function"){console.log("error lex requires a callback function");return}let v=r.get(n);if(!v)return;if(a&&typeof v.cb>"u"&&(v.cb=a,a=null),s!==null&&v.chain.push({item:s,soul:null}),!v.cb)return p(n);let{soul:b}=w({get:l,_opt:c},h);b&&g(l,b,h,c)},put:(s,l,a)=>{typeof l=="function"&&(a=l,l=!1);let c=j=>O=>{a?a(O):m(j)(O)};if(!n){a&&a("error please provide a key using get(key)");return}let d=r.get(n);if(!d)return;if(!d.cb){if(!a)return;d.cb=a,a=null}l&&(s={[E.random()]:s});let h=c(n),v=f(s);if(typeof v=="string"){h(v);return}let{item:b,soul:S}=w({put:s},h);if(!S)return;if(v===!0){let j=d.user||e.secure?{"#":S}:{"#":S,".":b};t.get(j,async O=>{if(O.err){h(`error getting ${S}: ${O.err}`);return}let A=O.put&&O.put[S],_=A&&A[b],x=N.is(_);if(!x){A||(A={}),A[b]=s;let k=await y(S,A,d.user,h);if(k===null)return;t.put(k,h);return}t.get({"#":x},async k=>{if(k.err){h(`error getting ${x}: ${k.err}`);return}if(!k.put||!k.put[x]){h(`error ${x} not found`);return}for(let D of Object.keys(k.put[x])){if(D==="_"||D===B||D===W)continue;let M=await new Promise(se=>{let pe=E.random(),Oe=[{item:D,soul:x}];r.set(pe,{chain:Oe,user:d.user}),p(pe).put(null,se)});if(M){h(M);return}}A||(A={}),A[b]=s;let C=await y(S,A,d.user,h);C!==null&&t.put(C,h)})});return}let $=d.user||e.secure?{"#":S}:{"#":S,".":b};t.get($,async j=>{if(j.err){h(`error getting ${S}.${b}: ${j.err}`);return}let O=j.put&&j.put[S],A=O&&O[b],_=N.is(A);if(!_){O||(O={}),O[b]=N.ify(E.random());let k=await y(S,O,d.user,h);if(k===null)return;t.put(k,C=>{if(C)h(`error putting ${b} on ${S}: ${C}`);else{let D=E.random(),M=[{item:b,soul:S}];r.set(D,{chain:M,user:d.user,cb:d.cb}),p(D).put(s)}});return}let x=[];for(let k of v){let C=await new Promise(D=>{if(P.is(s[k])&&!N.is(s[k])){let M=E.random(),se=[{item:k,soul:_}];r.set(M,{chain:se,user:d.user}),p(M).put(s[k],D)}else x.push(k),D(null)});if(C){h(C,n);return}}if(x.length===0){h(null);return}t.get({"#":_},async k=>{if(k.err){h(`error getting ${_}: ${k.err}`);return}let C=k.put&&k.put[_];C||(C={}),x.forEach(M=>{C[M]=s[M]});let D=await y(_,C,d.user,h);D!==null&&t.put(D,h)})})},on:(s,l,a,c)=>{if(typeof s=="function"&&(c=a,a=l,l=s,s=null),typeof l!="function"){console.log("error on() requires a callback function");return}if(!n){console.log("error please provide a key using get(key)"),l(null);return}let{item:d,soul:h}=w({on:s,_get:a,_opt:c},l);h&&(r.set(n,{chain:[{item:d,soul:h}],on:!0}),i.set(l,()=>p(n).next(null,l)),t.get({"#":h,".":d},v=>{if(v.err){console.log(`error getting ${h}.${d}: ${v.err}`);return}let b=v.put&&v.put[h]&&v.put[h][d],S=N.is(b);S?s?s=P.put(s,"#",S):s={"#":S,".":null}:s?s=P.put(s,"#",h):s={"#":h,".":d},t.on(s,i.get(l),a,c)}))},off:s=>{if(!n){console.log("error please provide a key using get(key)"),s&&s(null);return}let{item:l,soul:a}=w({off:!0},s);a&&t.get({"#":a,".":l},c=>{if(c.err){console.log(`error getting ${a}.${l}: ${c.err}`);return}let d=c.put&&c.put[a]&&c.put[a][l],h=N.is(d);h?t.off({"#":h},i.get(s)):t.off({"#":a},i.get(s)),i.delete(s),r.delete(n)})},user:()=>(o.get||(Object.assign(o,p()),o.get=(s,l,a,c)=>{typeof l=="function"&&(c=a,a=l,l=null);let d=null,h=null;if(o.is&&(d=o.is.pub),typeof s=="string"?h=s:s instanceof Array&&(s.length===2?(d=s[0],h=s[1]):s.length===1&&(h=s[0])),!d){console.log("error please log in or provide a public key"),a&&a(null);return}if(h===null||h===""||h==="_"){console.log("error please provide a key"),a&&a(null);return}if(l&&!a){console.log("error lex requires a callback function");return}n=E.random();let v=[{item:h,soul:"~"+d}];if(r.set(n,{chain:v,user:o.is,cb:a}),!a)return p(n);let b=m(n),{soul:S}=w({get:l,_opt:c},b);S&&g(l,S,b,c)}),o),wire:t,SEA:I}};return p()},gt=Be;export{gt as default};
|
|
4
4
|
//# sourceMappingURL=holster.js.map
|