helia 7.1.15-bdbda7ae → 7.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +2 -2
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.d.ts.map +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/dist/typedoc-urls.json +7 -0
- package/package.json +6 -6
- package/src/version.ts +1 -1
package/dist/index.min.js
CHANGED
|
@@ -110,7 +110,7 @@ ${e}`)}`:n!=null?`${n.split(`
|
|
|
110
110
|
${e}`)}`:t!=null?`${t}`:`${r.toString()}`}function SY(r){return r instanceof AggregateError||r?.name==="AggregateError"&&Array.isArray(r.errors)}function lN(r,e=""){if(SY(r)){let t=aN(r,e);return r.errors.length>0?(e=`${e} `,t+=`
|
|
111
111
|
${e}${r.errors.map(n=>`${lN(n,`${e}`)}`).join(`
|
|
112
112
|
${e}`)}`):t+=`
|
|
113
|
-
${e}[Error list was empty]`,t.trim()}return aN(r,e)}function vY(r){let e=()=>{};return e.enabled=!1,e.color="",e.diff=0,e.log=()=>{},e.namespace=r,e.destroy=()=>!0,e.extend=()=>e,e.useColors=()=>!1,e}function uN(r){return{forComponent(e){return hN(e,r)}}}function hN(r,e){let t=vY(`${r}:trace`);return Ze.enabled(`${r}:trace`)&&Ze.names.map(n=>n.toString()).find(n=>n.includes(":trace"))!=null&&(t=Ze(`${r}:trace`,e)),Object.assign(Ze(r,e),{error:Ze(`${r}:error`,e),trace:t,newScope:n=>hN(`${r}:${n}`,e)})}function cN(r){if(r!=null&&(r=r.trim(),r.length!==0))return r}var bs=class{has(e,t){return Promise.reject(new Error(".has is not implemented"))}put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}async*putMany(e,t){for await(let{cid:n,bytes:i}of e)await this.put(n,i,t),yield n}get(e,t){throw new Error(".get is not implemented")}async*getMany(e,t){for await(let n of e)yield{cid:n,bytes:this.get(n,t)}}delete(e,t){return Promise.reject(new Error(".delete is not implemented"))}async*deleteMany(e,t){for await(let n of e)await this.delete(n,t),yield n}async*getAll(e){throw new Error(".getAll is not implemented")}};function AY(r){return typeof r?.then=="function"}var h1=class extends bs{data;constructor(){super(),this.data=new Map}put(e,t,n){n?.signal?.throwIfAborted();let i;if(t instanceof Uint8Array)i=[t];else{let s=ss(t);if(AY(s))return s.then(o=>this._put(e,o,n));i=s}return this._put(e,i,n)}_put(e,t,n){return n?.signal?.throwIfAborted(),this.data.set(mt.encode(e.multihash.bytes),t),e}*get(e,t){t?.signal?.throwIfAborted();let n=this.data.get(mt.encode(e.multihash.bytes));if(n==null)throw new Rr;yield*n}has(e,t){return t?.signal?.throwIfAborted(),this.data.has(mt.encode(e.multihash.bytes))}async delete(e,t){t?.signal?.throwIfAborted(),this.data.delete(mt.encode(e.multihash.bytes))}*getAll(e){e?.signal?.throwIfAborted();for(let[t,n]of this.data.entries())yield{cid:H.createV1(Li,Se(mt.decode(t))),bytes:(async function*(){yield*n})()},e?.signal?.throwIfAborted()}};var NNe=al("blockstore:core:tiered");var dN="SHARDING";var tBe=new $e(dN);var mBe=al("datastore:core:tiered");var z4=class{lock;child;pins;routing;started;constructor(e,t,n,i={}){this.child=e,this.pins=t,this.routing=n,this.lock=xd({singleProcess:i.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await ht(this.child),this.started=!0}async stop(){await It(this.child),this.started=!1}unwrap(){return this.child}async put(e,t,n={}){n?.signal?.throwIfAborted();let i=await this.lock.readLock();try{return await this.child.put(e,t,n)}finally{i()}}async*putMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.putMany(e,t)}finally{n()}}async*get(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.get(e,t)}finally{n()}}async*getMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.getMany(e,t)}finally{n()}}async delete(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.writeLock();try{if(await this.pins.isPinned(e))throw new dh("Block was pinned - please unpin and try again");await this.routing.cancelReprovide(e,t),await this.child.delete(e,t)}finally{n()}}async*deleteMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.writeLock();try{let i=this;yield*this.child.deleteMany((async function*(){for await(let s of e){if(await i.pins.isPinned(s))throw new dh("Block was pinned - please unpin and try again");await i.routing.cancelReprovide(s,t),yield s}})(),t)}finally{n()}}async has(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{return await this.child.has(e,t)}finally{n()}}async*getAll(e={}){e?.signal?.throwIfAborted();let t=await this.lock.readLock();try{yield*this.child.getAll(e)}finally{t()}}createSession(e,t){return t?.signal?.throwIfAborted(),this.child.createSession(e,t)}};var Wx=new $e("/version"),pN=1;async function mN(r){if(!await r.has(Wx)){await r.put(Wx,S(`${pN}`));return}let e=await r.get(Wx),t=T(e);if(parseInt(t,10)!==pN)throw new zp("Invalid datastore version, a datastore migration may be required")}var Zx={};_e(Zx,{code:()=>Qx,createLink:()=>_N,createNode:()=>IN,decode:()=>FY,encode:()=>MY,name:()=>OY,prepare:()=>Yx,validate:()=>Xx});var _Y=new TextDecoder;function Gx(r,e){let t=0;for(let n=0;;n+=7){if(n>=64)throw new Error("protobuf: varint overflow");if(e>=r.length)throw new Error("protobuf: unexpected end of data");let i=r[e++];if(t+=n<28?(i&127)<<n:(i&127)*2**n,i<128)break}return[t,e]}function W4(r,e){let t;[t,e]=Gx(r,e);let n=e+t;if(t<0||n<0)throw new Error("protobuf: invalid length");if(n>r.length)throw new Error("protobuf: unexpected end of data");return[r.subarray(e,n),n]}function gN(r,e){let t;return[t,e]=Gx(r,e),[t&7,t>>3,e]}function TY(r){let e={},t=r.length,n=0;for(;n<t;){let i,s;if([i,s,n]=gN(r,n),s===1){if(e.Hash)throw new Error("protobuf: (PBLink) duplicate Hash section");if(i!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${i}) for Hash`);if(e.Name!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Name before Hash");if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Hash");[e.Hash,n]=W4(r,n)}else if(s===2){if(e.Name!==void 0)throw new Error("protobuf: (PBLink) duplicate Name section");if(i!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${i}) for Name`);if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Name");let o;[o,n]=W4(r,n),e.Name=_Y.decode(o)}else if(s===3){if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) duplicate Tsize section");if(i!==0)throw new Error(`protobuf: (PBLink) wrong wireType (${i}) for Tsize`);[e.Tsize,n]=Gx(r,n)}else throw new Error(`protobuf: (PBLink) invalid fieldNumber, expected 1, 2 or 3, got ${s}`)}if(n>t)throw new Error("protobuf: (PBLink) unexpected end of data");return e}function yN(r){let e=r.length,t=0,n,i=!1,s;for(;t<e;){let a,c;if([a,c,t]=gN(r,t),a!==2)throw new Error(`protobuf: (PBNode) invalid wireType, expected 2, got ${a}`);if(c===1){if(s)throw new Error("protobuf: (PBNode) duplicate Data section");[s,t]=W4(r,t),n&&(i=!0)}else if(c===2){if(i)throw new Error("protobuf: (PBNode) duplicate Links section");n||(n=[]);let l;[l,t]=W4(r,t),n.push(TY(l))}else throw new Error(`protobuf: (PBNode) invalid fieldNumber, expected 1 or 2, got ${c}`)}if(t>e)throw new Error("protobuf: (PBNode) unexpected end of data");let o={};return s&&(o.Data=s),o.Links=n||[],o}var xN=new TextEncoder,wN=2**32,CY=2**31;function kY(r,e){let t=e.length;if(typeof r.Tsize=="number"){if(r.Tsize<0)throw new Error("Tsize cannot be negative");if(!Number.isSafeInteger(r.Tsize))throw new Error("Tsize too large for encoding");t=d1(e,t,r.Tsize)-1,e[t]=24}if(typeof r.Name=="string"){let n=xN.encode(r.Name);t-=n.length,e.set(n,t),t=d1(e,t,n.length)-1,e[t]=18}return r.Hash&&(t-=r.Hash.length,e.set(r.Hash,t),t=d1(e,t,r.Hash.length)-1,e[t]=10),e.length-t}function bN(r,e,t){return r-=e.Data.length,t.set(e.Data,r),r=d1(t,r,e.Data.length)-1,t[r]=10,r}function EN(r,e){let t=PY(r),n=new Uint8Array(t),i=t,s=e?.fieldOrder==="data-first"?e.fieldOrder:"links-first";if(r.Data&&s==="links-first"&&(i=bN(i,r,n)),r.Links)for(let o=r.Links.length-1;o>=0;o--){let a=kY(r.Links[o],n.subarray(0,i));i-=a,i=d1(n,i,a)-1,n[i]=18}return r.Data&&s==="data-first"&&(i=bN(i,r,n)),n}function RY(r){let e=0;if(r.Hash){let t=r.Hash.length;e+=1+t+wu(t)}if(typeof r.Name=="string"){let t=xN.encode(r.Name).length;e+=1+t+wu(t)}return typeof r.Tsize=="number"&&(e+=1+wu(r.Tsize)),e}function PY(r){let e=0;if(r.Data){let t=r.Data.length;e+=1+t+wu(t)}if(r.Links)for(let t of r.Links){let n=RY(t);e+=1+n+wu(n)}return e}function d1(r,e,t){e-=wu(t);let n=e;for(;t>=CY;)r[e++]=t&127|128,t/=128;for(;t>=128;)r[e++]=t&127|128,t>>>=7;return r[e]=t,n}function wu(r){return r%2===0&&r++,Math.floor((LY(r)+6)/7)}function LY(r){let e=0;return r>=wN&&(r=Math.floor(r/wN),e=32),r>=65536&&(r>>>=16,e+=16),r>=256&&(r>>>=8,e+=8),e+DY[r]}var DY=[0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8];var NY=["Data","Links"],BY=["Hash","Name","Tsize"],jx=new TextEncoder;function vN(r,e){if(r===e)return 0;let t=r.Name?jx.encode(r.Name):[],n=e.Name?jx.encode(e.Name):[],i=t.length,s=n.length;for(let o=0,a=Math.min(i,s);o<a;++o)if(t[o]!==n[o]){i=t[o],s=n[o];break}return i<s?-1:s<i?1:0}function SN(r,e){return!Object.keys(r).some(t=>!e.includes(t))}function AN(r){if(typeof r.asCID=="object"){let t=H.asCID(r);if(!t)throw new TypeError("Invalid DAG-PB form");return{Hash:t}}if(typeof r!="object"||Array.isArray(r))throw new TypeError("Invalid DAG-PB form");let e={};if(r.Hash){let t=H.asCID(r.Hash);try{t||(typeof r.Hash=="string"?t=H.parse(r.Hash):r.Hash instanceof Uint8Array&&(t=H.decode(r.Hash)))}catch(n){throw new TypeError(`Invalid DAG-PB form: ${n.message}`)}t&&(e.Hash=t)}if(!e.Hash)throw new TypeError("Invalid DAG-PB form");return typeof r.Name=="string"&&(e.Name=r.Name),typeof r.Tsize=="number"&&(e.Tsize=r.Tsize),e}function Yx(r){if((r instanceof Uint8Array||typeof r=="string")&&(r={Data:r}),typeof r!="object"||Array.isArray(r))throw new TypeError("Invalid DAG-PB form");let e={};if(r.Data!==void 0)if(typeof r.Data=="string")e.Data=jx.encode(r.Data);else if(r.Data instanceof Uint8Array)e.Data=r.Data;else throw new TypeError("Invalid DAG-PB form");if(r.Links!==void 0)if(Array.isArray(r.Links))e.Links=r.Links.map(AN),e.Links.sort(vN);else throw new TypeError("Invalid DAG-PB form");else e.Links=[];return e}function Xx(r){if(!r||typeof r!="object"||Array.isArray(r)||r instanceof Uint8Array||r["/"]&&r["/"]===r.bytes)throw new TypeError("Invalid DAG-PB form");if(!SN(r,NY))throw new TypeError("Invalid DAG-PB form (extraneous properties)");if(r.Data!==void 0&&!(r.Data instanceof Uint8Array))throw new TypeError("Invalid DAG-PB form (Data must be bytes)");if(!Array.isArray(r.Links))throw new TypeError("Invalid DAG-PB form (Links must be a list)");for(let e=0;e<r.Links.length;e++){let t=r.Links[e];if(!t||typeof t!="object"||Array.isArray(t)||t instanceof Uint8Array||t["/"]&&t["/"]===t.bytes)throw new TypeError("Invalid DAG-PB form (bad link)");if(!SN(t,BY))throw new TypeError("Invalid DAG-PB form (extraneous properties on link)");if(t.Hash===void 0)throw new TypeError("Invalid DAG-PB form (link must have a Hash)");if(t.Hash==null||!t.Hash["/"]||t.Hash["/"]!==t.Hash.bytes)throw new TypeError("Invalid DAG-PB form (link Hash must be a CID)");if(t.Name!==void 0&&typeof t.Name!="string")throw new TypeError("Invalid DAG-PB form (link Name must be a string)");if(t.Tsize!==void 0){if(typeof t.Tsize!="number"||t.Tsize%1!==0)throw new TypeError("Invalid DAG-PB form (link Tsize must be an integer)");if(t.Tsize<0)throw new TypeError("Invalid DAG-PB form (link Tsize cannot be negative)")}if(e>0&&vN(t,r.Links[e-1])===-1)throw new TypeError("Invalid DAG-PB form (links must be sorted by Name bytes)")}}function IN(r,e=[]){return Yx({Data:r,Links:e})}function _N(r,e,t){return AN({Hash:t,Name:r,Tsize:e})}function TN(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var OY="dag-pb",Qx=112;function MY(r,e){Xx(r);let t={};return r.Links&&(t.Links=r.Links.map(n=>{let i={};return n.Hash&&(i.Hash=n.Hash.bytes),n.Name!==void 0&&(i.Name=n.Name),n.Tsize!==void 0&&(i.Tsize=n.Tsize),i})),r.Data&&(t.Data=r.Data),EN(t,e)}function FY(r){let e=TN(r),t=yN(e),n={};return t.Data&&(n.Data=t.Data),t.Links&&(n.Links=t.Links.map(i=>{let s={};try{s.Hash=H.decode(i.Hash)}catch{}if(!s.Hash)throw new Error("Invalid Hash field found in link, expected CID");return i.Name!==void 0&&(s.Name=i.Name),i.Tsize!==void 0&&(s.Tsize=i.Tsize),s})),n}function CN(r=[],e){let t={[Qx]:Zx,[Li]:Ko};return r.forEach(n=>{t[n.code]=n}),async n=>{let i=t[n];if(i==null&&e!=null){let s=e(n);Fs(s)?i=await s:i=s,t[i.code]=i}if(i!=null)return i;throw new Hu(`Could not load codec for ${n}`)}}function kN(r=[],e){let t={};return r=[H6(),z6(),$u(),...r],r.forEach(n=>{t[n.type]=n,t[n.code]=n}),async n=>{let i=t[n];if(i==null&&e!=null){let s=e(n);Fs(s)?i=await s:i=s,t[i.type]=i,t[i.code]=i}if(i!=null)return i;throw new qu(`Could not load crypto for ${i}`)}}function RN(r=[],e){let t={[We.code]:We,[nt.code]:nt};return r.forEach(n=>{t[n.code]=n}),async n=>{let i=t[n];if(i==null&&e!=null){let s=e(n);Fs(s)?i=await s:i=s,t[i.code]=i}if(i!=null)return i;throw new Vu(`No hasher configured for multihash code 0x${n.toString(16)}, please configure one. You can look up which hash this is at https://github.com/multiformats/multicodec/blob/master/table.csv`)}}var G4=0,bu=class extends Error{static name="IdentityHashDigestTooLongError";name="IdentityHashDigestTooLongError"},j4=class extends bs{child;maxDigestLength;constructor(e,t){super(),this.child=e,this.maxDigestLength=t?.maxDigestLength}put(e,t,n){if(e.multihash.code===G4){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new bu(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);return n?.signal?.throwIfAborted(),e}return this.child==null?(n?.signal?.throwIfAborted(),e):this.child.put(e,t,n)}async*get(e,t){if(e.multihash.code===G4){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new bu(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);t?.signal?.throwIfAborted(),yield e.multihash.digest;return}if(this.child==null)throw t?.signal?.throwIfAborted(),new Rr;yield*this.child.get(e,t)}has(e,t){if(e.multihash.code===G4){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new bu(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);return t?.signal?.throwIfAborted(),!0}return this.child==null?(t?.signal?.throwIfAborted(),!1):this.child.has(e,t)}delete(e,t){if(e.code===G4){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new bu(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);t?.signal?.throwIfAborted();return}if(this.child!=null)return this.child.delete(e,t)}async*getAll(e){this.child!=null&&(yield*this.child.getAll(e)),e?.signal?.throwIfAborted()}};var UY=128,xu=class{child;getHasher;log;logger;blockBrokers;constructor(e,t={}){this.log=e.logger.forComponent("helia:networked-storage"),this.logger=e.logger,this.blockBrokers=e.blockBrokers,this.child=new j4(e.blockstore,{maxDigestLength:t.maxIdentityHashDigestLength??UY}),this.getHasher=e.getHasher}async put(e,t,n={}){return await this.child.has(e,n)?(n.onProgress?.(new C("blocks:put:duplicate",e)),e):(n.onProgress?.(new C("blocks:put:blockstore:put",e)),await this.child.put(e,t,n),n.onProgress?.(new C("blocks:put:providers:notify",e)),await Promise.all(this.blockBrokers.map(async i=>i.announce?.(e,n))),e)}async*putMany(e,t={}){let n=qr(e,async({cid:o})=>{let a=await this.child.has(o,t);return a&&t.onProgress?.(new C("blocks:put-many:duplicate",o)),!a});t.onProgress?.(new C("blocks:put-many:blockstore:put-many"));let i=this,s=async function*(o){for await(let a of o)t.onProgress?.(new C("blocks:put-many:blockstore:put",a.cid)),yield a,t.onProgress?.(new C("blocks:put-many:providers:notify",a.cid)),await Promise.all(i.blockBrokers.map(async c=>c.announce?.(a.cid,t)))};yield*this.child.putMany(s(n),t)}async*get(e,t={}){let n=await this.child.has(e,t),i=t.offline===!0;if(!n){if(i)throw new fh("The block was present in the blockstore and the node is running offline so cannot fetch it");let s=await this.getHasher(e.multihash.code);t?.signal?.throwIfAborted(),t.onProgress?.(new C("blocks:get:providers:get",e));let o=await PN(e,this.blockBrokers,s,{...t,log:this.log});t.onProgress?.(new C("blocks:get:blockstore:put",e)),await this.child.put(e,o,t),t.onProgress?.(new C("blocks:get:providers:notify",e)),await Promise.all(this.blockBrokers.map(async a=>a.announce?.(e,t))),yield o;return}t.onProgress?.(new C("blocks:get:blockstore:get",e)),yield*this.child.get(e,t)}async*getMany(e,t={}){t.onProgress?.(new C("blocks:get-many:blockstore:get-many")),yield*this.child.getMany(hd(e,async n=>{let i=await this.child.has(n,t),s=t.offline===!0;if(!i){if(s)throw new fh("The block was present in the blockstore and the node is running offline so cannot fetch it");let o=await this.getHasher(n.multihash.code);t?.signal?.throwIfAborted(),t.onProgress?.(new C("blocks:get-many:providers:get",n));let a=await PN(n,this.blockBrokers,o,{...t,log:this.log});t.onProgress?.(new C("blocks:get-many:blockstore:put",n)),await this.child.put(n,a,t),t.onProgress?.(new C("blocks:get-many:providers:notify",n)),await Promise.all(this.blockBrokers.map(async c=>c.announce?.(n,t)))}}))}async delete(e,t={}){t.onProgress?.(new C("blocks:delete:blockstore:delete",e)),await this.child.delete(e,t)}async*deleteMany(e,t={}){t.onProgress?.(new C("blocks:delete-many:blockstore:delete-many")),yield*this.child.deleteMany((async function*(){for await(let n of e)yield n})(),t)}async has(e,t={}){return this.child.has(e,t)}async*getAll(e={}){e.onProgress?.(new C("blocks:get-all:blockstore:get-many")),yield*this.child.getAll(e)}};async function PN(r,e,t,n){let i=KY(r,t),s=new AbortController,o=he([s.signal,n.signal]);s.signal;let a=[];for(let c of e)$Y(c)&&a.push(c);if(a.length===0)throw new Ki(`No block brokers capable of retrieving blocks are configured, the CID ${r} cannot be fetched from the network`);try{return await Promise.any(a.map(async c=>{try{let l=!1,u=await c.retrieve(r,{...n,signal:o,validateFn:async h=>{await i(h),n.signal?.throwIfAborted(),l=!0}});return l||(await i(u),n.signal?.throwIfAborted()),u}catch(l){throw n.log.error("could not retrieve verified block for %c from %s - %e",r,c.name,l),l}}))}catch(c){throw new Gp(c.errors,`Failed to load block for ${r}`)}finally{s.abort(),o.clear()}}function $Y(r){return typeof r.retrieve=="function"}var KY=(r,e)=>{if(e==null)throw new v(`No hasher configured for multihash code 0x${r.multihash.code.toString(16)}, please configure one. You can look up which hash this is at https://github.com/multiformats/multicodec/blob/master/table.csv`);return async t=>{let n,i=e.digest(t,{truncate:r.multihash.digest.byteLength});if(Fs(i)?n=await i:n=i,!oe(n.digest,r.multihash.digest))throw new Tc("Hash of downloaded block did not match multihash from passed CID")}};var Y4=class extends xu{closeController;constructor(e,t){super(e),this.closeController=new AbortController,this.closeController.signal,this.log=e.logger.forComponent(`helia:session-storage:${t.root}`)}close(){this.closeController.abort()}async addPeer(e,t){await Promise.all(this.blockBrokers.map(n=>n.addPeer(e,t)))}async put(e,t,n={}){let i=he([this.closeController.signal,n.signal]);try{return await super.put(e,t,{...n,signal:i})}finally{i.clear()}}async*putMany(e,t={}){let n=he([this.closeController.signal,t.signal]);try{yield*super.putMany(e,{...t,signal:n})}finally{n.clear()}}async*get(e,t={}){let n=he([this.closeController.signal,t.signal]);try{yield*super.get(e,{...t,signal:n})}finally{n.clear()}}async*getMany(e,t={}){let n=he([this.closeController.signal,t.signal]);try{yield*super.getMany(e,{...t,signal:n})}finally{n.clear()}}async delete(e,t={}){let n=he([this.closeController.signal,t.signal]);try{await super.delete(e,{...t,signal:n})}finally{n.clear()}}async*deleteMany(e,t={}){let n=he([this.closeController.signal,t.signal]);try{yield*super.deleteMany(e,{...t,signal:n})}finally{n.clear()}}async has(e,t={}){let n=he([this.closeController.signal,t.signal]);try{return await super.has(e,{...t,signal:n})}finally{n.clear()}}async*getAll(e={}){let t=he([this.closeController.signal,e.signal]);try{yield*super.getAll({...e,signal:t})}finally{t.clear()}}};var X4=class extends xu{started;constructor(e,t={}){super(e,t),this.started=!1}isStarted(){return this.started}async start(){await ht(this.child,...this.blockBrokers),this.started=!0}async stop(){await It(this.child,...this.blockBrokers),this.started=!1}unwrap(){return this.child}createSession(e,t){if(this.blockBrokers.length===0)throw new Ki("No block brokers configured");let n=this.blockBrokers.map(i=>i.createSession?.(t)).filter(i=>i!=null);if(n.length===0)throw new Ki(`No configured block brokers support sessions - tried ${this.blockBrokers.map(i=>i.name).join(", ")}`);return new Y4({blockstore:this.child,blockBrokers:n,getHasher:this.getHasher,logger:this.logger},{root:e})}};var DN="/pin/",LN="/pinned-block/",Jx=hr;function Q4(r){return r.version===0&&(r=r.toV1()),new $e(`${DN}${r.toString(Jx)}`)}var Z4=class{datastore;blockstore;getCodec;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.getCodec=n}async*add(e,t={}){let n=Q4(e);if(await this.datastore.has(n))throw new qp("Already pinned");let i=Math.round(t.depth??1/0);if(i<0)throw new v("Depth must be greater than or equal to 0");let s=(t.walker??uy())({blockstore:this.blockstore,getCodec:this.getCodec});for await(let a of s.walk(e,{...t,depth:i})){let c=a.block.cid;await this.#e(c,l=>l.pinnedBy.find(u=>oe(u,e.bytes))!=null?!1:(l.pinCount++,l.pinnedBy.push(e.bytes),!0),t),yield c}let o={depth:i,metadata:t.metadata??{}};await this.datastore.put(n,oa(o),t)}async#e(e,t,n){let i=new $e(`${LN}${Jx.encode(e.multihash.bytes)}`),s={pinCount:0,pinnedBy:[]};try{s=On(await this.datastore.get(i,n))}catch(a){if(a.name!=="NotFoundError")throw a}if(t(s)){if(s.pinCount===0&&await this.datastore.has(i)){await this.datastore.delete(i);return}await this.datastore.put(i,oa(s),n),n.onProgress?.(new C("helia:pin:add",e))}}async*rm(e,t={}){let n=Q4(e),i=await this.datastore.get(n,t),s=On(i);await this.datastore.delete(n,t);let o=(t.walker??uy())({blockstore:this.blockstore,getCodec:this.getCodec});for await(let a of o.walk(e,{...t,depth:s.depth})){let c=a.block.cid;await this.#e(c,l=>(l.pinCount--,l.pinnedBy=l.pinnedBy.filter(u=>oe(u,e.bytes)),!0),{...t,depth:s.depth}),yield c}}async*ls(e={}){for await(let{key:t,value:n}of this.datastore.query({prefix:DN+(e.cid!=null?`${e.cid.toString(hr)}`:"")},e)){let i=H.parse(t.toString().substring(5),hr),s=On(n);yield{cid:i,...s}}}async isPinned(e,t={}){let n=new $e(`${LN}${Jx.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}async get(e,t){let n=Q4(e),i=await this.datastore.get(n,t);return On(i)}async setMetadata(e,t,n){let i=Q4(e),s=await this.datastore.get(i,n),o=On(s);o.metadata=t??{},await this.datastore.put(i,oa(o),n)}};var VY=5,J4=class{name;log;routers;providerLookupConcurrency;constructor(e,t){this.name="helia",this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[],this.providerLookupConcurrency=t.providerLookupConcurrency??VY,this.findProviders=e.metrics?.traceFunction("helia.routing.findProviders",this.findProviders.bind(this),{optionsIndex:1})??this.findProviders,this.provide=e.metrics?.traceFunction("helia.routing.provide",this.provide.bind(this),{optionsIndex:1})??this.provide,this.cancelReprovide=e.metrics?.traceFunction("helia.routing.cancelReprovide",this.cancelReprovide.bind(this),{optionsIndex:1})??this.cancelReprovide,this.put=e.metrics?.traceFunction("helia.routing.put",this.put.bind(this),{optionsIndex:2})??this.put,this.get=e.metrics?.traceFunction("helia.routing.get",this.get.bind(this),{optionsIndex:1})??this.get,this.findPeer=e.metrics?.traceFunction("helia.routing.findPeer",this.findPeer.bind(this),{optionsIndex:1})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("helia.routing.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1})??this.getClosestPeers}async start(){await ht(...this.routers)}async stop(){await It(...this.routers)}hasRouter(e){return this.routers.findIndex(t=>t.name===e)!==-1}addRouter(e){this.routers.push(e)}async*findProviders(e,t={}){if(this.routers.length===0)throw new _s("No content routers available");let n=0,i=[],s=this;async function*o(u){let h=0,d=u.map(async function*(p){let g=0;t?.onProgress?.(new C("helia:routing:find-providers:start",{router:p.name,cid:e}));try{for await(let y of p.findProviders(e,t))g++,t?.onProgress?.(new C("helia:routing:find-providers:provider",{router:p.name,cid:e,provider:y})),yield y}catch(y){i.push(y)}finally{s.log("router %s found %d providers for %c",p.name,g,e),t?.onProgress?.(new C("helia:routing:find-providers:end",{router:p.name,cid:e,found:g})),h++,h===u.length&&f.size===0&&f.emitIdle()}}),f=new ct({concurrency:s.providerLookupConcurrency});for await(let p of gr(f.toGenerator(),...d))if(p!=null){if(p.multiaddrs.length===0){if(f.queue.find(g=>g.options.peer.equals(p.id))!=null)continue;f.add(async()=>{try{let g=await s.findPeer(p.id,t);return g.multiaddrs.length===0?null:{...g,protocols:p.protocols,router:p.router,fallback:p.fallback}}catch(g){return s.log.error("could not load multiaddrs for peer %p - %e",p.id,g),null}},{peer:p.id,signal:t.signal}).catch(g=>{s.log.error("could not load multiaddrs for peer %p - %e",p.id,g)});continue}n++,yield p}}let a=Sc(this.routers,"findProviders"),c=a.filter(u=>u.capabilities==null||!u.capabilities().includes("fallback")),l=a.filter(u=>u.capabilities?.().includes("fallback")===!0);this.log("findProviders for %c start using routers %s",e,c.map(u=>u.name).join(", ")),yield*o(c),l.length>0&&(this.log("findProviders for %c using fallback routers %s",e,l.map(u=>u.name).join(", ")),yield*o(l)),this.log("findProviders finished, found %d providers for %c",n,e)}async provide(e,t={}){if(this.routers.length===0)throw new _s("No content routers available");await Promise.all(Sc(this.routers,"provide").map(async n=>{t?.onProgress?.(new C("helia:routing:provide:start",{router:n.name,cid:e})),await n.provide(e,t),t?.onProgress?.(new C("helia:routing:provide:end",{router:n.name,cid:e}))}))}async cancelReprovide(e,t={}){await Promise.all(Sc(this.routers,"cancelReprovide").map(async n=>{t?.onProgress?.(new C("helia:routing:cancel-reprovide:start",{router:n.name,cid:e})),await n.cancelReprovide(e,t),t?.onProgress?.(new C("helia:routing:cancel-reprovide:end",{router:n.name,cid:e}))}))}async put(e,t,n){await Promise.all(Sc(this.routers,"put").map(async i=>{n?.onProgress?.(new C("helia:routing:put:start",{router:i.name,key:e,value:t})),await i.put(e,t,n),n?.onProgress?.(new C("helia:routing:put:end",{router:i.name,key:e,value:t}))}))}async get(e,t){let n=[],i,s=new AbortController,o=he([s.signal,t?.signal]);try{i=await Promise.any(Sc(this.routers,"get").map(async a=>{t?.onProgress?.(new C("helia:routing:get:start",{router:a.name,key:e}));try{return await a.get(e,{...t,signal:o})}catch(c){throw this.log("router %s failed with %e",a.name,c),n.push(c),c}finally{t?.onProgress?.(new C("helia:routing:get:end",{router:a.name,key:e}))}}))}catch{}finally{s.abort(),o.clear()}if(i==null)throw new Wp(n,`Failed to get value key ${T(e,"base58btc")}`);return i}async findPeer(e,t){if(this.routers.length===0)throw new _s("No peer routers available");let n=new AbortController,i=he([n.signal,t?.signal]);let s=this,o=gr(...Sc(this.routers,"findPeer").map(a=>(async function*(){t?.onProgress?.(new C("helia:routing:find-peer:start",{router:a.name,peerId:e}));try{yield await a.findPeer(e,{...t,signal:i})}catch(c){s.log.error(c)}finally{t?.onProgress?.(new C("helia:routing:find-peer:end",{router:a.name,peerId:e}))}})()));try{for await(let a of o)if(a!=null)return a}finally{n.abort(),i.clear()}throw new Ce("Could not find peer in routing")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new _s("No peer routers available");for await(let n of gr(...Sc(this.routers,"getClosestPeers").map(async function*(i){t?.onProgress?.(new C("helia:routing:get-closest-peers:start",{router:i.name,key:e}));try{yield*i.getClosestPeers(e,t)}finally{t?.onProgress?.(new C("helia:routing:get-closest-peers:end",{router:i.name,key:e}))}})))n!=null&&(yield n)}};function Sc(r,e){return r.filter(t=>t[e]!=null)}var e6=class{info;blockstore;datastore;events;pins;logger;routing;getCodec;getHasher;getCrypto;dns;keychain;metrics;status;log;blockBrokers;mixins;components;constructor(e){this.info={name:e.name,version:e.version},this.logger=e.logger??uN(),this.log=this.logger.forComponent("helia"),this.getHasher=RN(e.hashers,e.loadHasher),this.getCodec=CN(e.codecs,e.loadCodec),this.getCrypto=kN(e.cryptos,e.loadCrypto),this.dns=e.dns??ig(),this.metrics=e.metrics,this.events=new pe,this.status="stopped",this.mixins=[],this.components={blockstore:e.blockstore??new h1,datastore:e.datastore??new ja,logger:this.logger,blockBrokers:[],getHasher:this.getHasher,getCodec:this.getCodec,getCrypto:this.getCrypto,dns:this.dns,metrics:this.metrics,...e.components??{}},this.keychain=this.components.keychain=oN()(this.components),this.routing=this.components.routing=new J4(this.components,{routers:(e.routers??[]).flatMap(n=>(typeof n=="function"&&(n=n(this.components)),[n])),providerLookupConcurrency:e.providerLookupConcurrency}),this.blockBrokers=this.components.blockBrokers=(e.blockBrokers??[]).map(n=>(typeof n=="function"&&(n=n(this.components)),n));let t=new X4(this.components,e);this.pins=new Z4(this.components.datastore,t,this.getCodec),this.blockstore=new z4(t,this.pins,this.routing,{holdGcLock:e.holdGcLock??!0}),this.datastore=this.components.datastore}hasRouter(e){return this.routing.hasRouter(e)}addRouter(e){typeof e=="function"&&(e=e(this.components)),this.routing.addRouter(e)}hasBlockBroker(e){return this.blockBrokers.findIndex(t=>t.name===e)!==-1}addBlockBroker(e){typeof e=="function"&&(e=e(this.components)),this.blockBrokers.push(e)}addMixin(e){if(this.mixins.find(t=>t.name===e.name)!=null)throw new Ki(`A mixin with the name "${e.name} is already present`);this.mixins.push(e)}async start(){this.status="starting",await mN(this.datastore),await ht(this.blockstore,this.datastore,this.routing,...this.blockBrokers);for(let e of this.mixins)await e.start?.(this);return this.status="started",this.events.dispatchEvent(new CustomEvent("start",{detail:this})),this}async stop(){this.status="stopping";for(let e of this.mixins)await e.stop?.(this);return await It(this.blockstore,this.datastore,this.routing,...this.blockBrokers),this.status="stopped",this.events.dispatchEvent(new CustomEvent("stop",{detail:this})),this}async gc(e={}){let t=await this.blockstore.lock.writeLock();try{let n=this,i=this.blockstore.unwrap();this.log("gc start"),await kr(i.deleteMany((async function*(){for await(let{cid:s}of i.getAll())try{if(await n.pins.isPinned(s,e))continue;yield s,e.onProgress?.(new C("helia:gc:deleted",s))}catch(o){n.log.error("error during gc - %e",o),e.onProgress?.(new C("helia:gc:error",o))}})()))}finally{t()}this.log("gc finished")}};var NN="7.1.15-bdbda7ae",BN="helia";function HY(r={}){return f_(jD(B_(ON({...r,codecs:[Ux,qx,k1,...r.codecs??[]],hashers:[P6,...r.hashers??[]]}),r.http),r.libp2p),r.bitswap)}function ON(r={}){return new e6({name:BN,version:NN,...r})}return zN(qY);})();
|
|
113
|
+
${e}[Error list was empty]`,t.trim()}return aN(r,e)}function vY(r){let e=()=>{};return e.enabled=!1,e.color="",e.diff=0,e.log=()=>{},e.namespace=r,e.destroy=()=>!0,e.extend=()=>e,e.useColors=()=>!1,e}function uN(r){return{forComponent(e){return hN(e,r)}}}function hN(r,e){let t=vY(`${r}:trace`);return Ze.enabled(`${r}:trace`)&&Ze.names.map(n=>n.toString()).find(n=>n.includes(":trace"))!=null&&(t=Ze(`${r}:trace`,e)),Object.assign(Ze(r,e),{error:Ze(`${r}:error`,e),trace:t,newScope:n=>hN(`${r}:${n}`,e)})}function cN(r){if(r!=null&&(r=r.trim(),r.length!==0))return r}var bs=class{has(e,t){return Promise.reject(new Error(".has is not implemented"))}put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}async*putMany(e,t){for await(let{cid:n,bytes:i}of e)await this.put(n,i,t),yield n}get(e,t){throw new Error(".get is not implemented")}async*getMany(e,t){for await(let n of e)yield{cid:n,bytes:this.get(n,t)}}delete(e,t){return Promise.reject(new Error(".delete is not implemented"))}async*deleteMany(e,t){for await(let n of e)await this.delete(n,t),yield n}async*getAll(e){throw new Error(".getAll is not implemented")}};function AY(r){return typeof r?.then=="function"}var h1=class extends bs{data;constructor(){super(),this.data=new Map}put(e,t,n){n?.signal?.throwIfAborted();let i;if(t instanceof Uint8Array)i=[t];else{let s=ss(t);if(AY(s))return s.then(o=>this._put(e,o,n));i=s}return this._put(e,i,n)}_put(e,t,n){return n?.signal?.throwIfAborted(),this.data.set(mt.encode(e.multihash.bytes),t),e}*get(e,t){t?.signal?.throwIfAborted();let n=this.data.get(mt.encode(e.multihash.bytes));if(n==null)throw new Rr;yield*n}has(e,t){return t?.signal?.throwIfAborted(),this.data.has(mt.encode(e.multihash.bytes))}async delete(e,t){t?.signal?.throwIfAborted(),this.data.delete(mt.encode(e.multihash.bytes))}*getAll(e){e?.signal?.throwIfAborted();for(let[t,n]of this.data.entries())yield{cid:H.createV1(Li,Se(mt.decode(t))),bytes:(async function*(){yield*n})()},e?.signal?.throwIfAborted()}};var NNe=al("blockstore:core:tiered");var dN="SHARDING";var tBe=new $e(dN);var mBe=al("datastore:core:tiered");var z4=class{lock;child;pins;routing;started;constructor(e,t,n,i={}){this.child=e,this.pins=t,this.routing=n,this.lock=xd({singleProcess:i.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await ht(this.child),this.started=!0}async stop(){await It(this.child),this.started=!1}unwrap(){return this.child}async put(e,t,n={}){n?.signal?.throwIfAborted();let i=await this.lock.readLock();try{return await this.child.put(e,t,n)}finally{i()}}async*putMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.putMany(e,t)}finally{n()}}async*get(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.get(e,t)}finally{n()}}async*getMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.getMany(e,t)}finally{n()}}async delete(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.writeLock();try{if(await this.pins.isPinned(e))throw new dh("Block was pinned - please unpin and try again");await this.routing.cancelReprovide(e,t),await this.child.delete(e,t)}finally{n()}}async*deleteMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.writeLock();try{let i=this;yield*this.child.deleteMany((async function*(){for await(let s of e){if(await i.pins.isPinned(s))throw new dh("Block was pinned - please unpin and try again");await i.routing.cancelReprovide(s,t),yield s}})(),t)}finally{n()}}async has(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{return await this.child.has(e,t)}finally{n()}}async*getAll(e={}){e?.signal?.throwIfAborted();let t=await this.lock.readLock();try{yield*this.child.getAll(e)}finally{t()}}createSession(e,t){return t?.signal?.throwIfAborted(),this.child.createSession(e,t)}};var Wx=new $e("/version"),pN=1;async function mN(r){if(!await r.has(Wx)){await r.put(Wx,S(`${pN}`));return}let e=await r.get(Wx),t=T(e);if(parseInt(t,10)!==pN)throw new zp("Invalid datastore version, a datastore migration may be required")}var Zx={};_e(Zx,{code:()=>Qx,createLink:()=>_N,createNode:()=>IN,decode:()=>FY,encode:()=>MY,name:()=>OY,prepare:()=>Yx,validate:()=>Xx});var _Y=new TextDecoder;function Gx(r,e){let t=0;for(let n=0;;n+=7){if(n>=64)throw new Error("protobuf: varint overflow");if(e>=r.length)throw new Error("protobuf: unexpected end of data");let i=r[e++];if(t+=n<28?(i&127)<<n:(i&127)*2**n,i<128)break}return[t,e]}function W4(r,e){let t;[t,e]=Gx(r,e);let n=e+t;if(t<0||n<0)throw new Error("protobuf: invalid length");if(n>r.length)throw new Error("protobuf: unexpected end of data");return[r.subarray(e,n),n]}function gN(r,e){let t;return[t,e]=Gx(r,e),[t&7,t>>3,e]}function TY(r){let e={},t=r.length,n=0;for(;n<t;){let i,s;if([i,s,n]=gN(r,n),s===1){if(e.Hash)throw new Error("protobuf: (PBLink) duplicate Hash section");if(i!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${i}) for Hash`);if(e.Name!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Name before Hash");if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Hash");[e.Hash,n]=W4(r,n)}else if(s===2){if(e.Name!==void 0)throw new Error("protobuf: (PBLink) duplicate Name section");if(i!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${i}) for Name`);if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Name");let o;[o,n]=W4(r,n),e.Name=_Y.decode(o)}else if(s===3){if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) duplicate Tsize section");if(i!==0)throw new Error(`protobuf: (PBLink) wrong wireType (${i}) for Tsize`);[e.Tsize,n]=Gx(r,n)}else throw new Error(`protobuf: (PBLink) invalid fieldNumber, expected 1, 2 or 3, got ${s}`)}if(n>t)throw new Error("protobuf: (PBLink) unexpected end of data");return e}function yN(r){let e=r.length,t=0,n,i=!1,s;for(;t<e;){let a,c;if([a,c,t]=gN(r,t),a!==2)throw new Error(`protobuf: (PBNode) invalid wireType, expected 2, got ${a}`);if(c===1){if(s)throw new Error("protobuf: (PBNode) duplicate Data section");[s,t]=W4(r,t),n&&(i=!0)}else if(c===2){if(i)throw new Error("protobuf: (PBNode) duplicate Links section");n||(n=[]);let l;[l,t]=W4(r,t),n.push(TY(l))}else throw new Error(`protobuf: (PBNode) invalid fieldNumber, expected 1 or 2, got ${c}`)}if(t>e)throw new Error("protobuf: (PBNode) unexpected end of data");let o={};return s&&(o.Data=s),o.Links=n||[],o}var xN=new TextEncoder,wN=2**32,CY=2**31;function kY(r,e){let t=e.length;if(typeof r.Tsize=="number"){if(r.Tsize<0)throw new Error("Tsize cannot be negative");if(!Number.isSafeInteger(r.Tsize))throw new Error("Tsize too large for encoding");t=d1(e,t,r.Tsize)-1,e[t]=24}if(typeof r.Name=="string"){let n=xN.encode(r.Name);t-=n.length,e.set(n,t),t=d1(e,t,n.length)-1,e[t]=18}return r.Hash&&(t-=r.Hash.length,e.set(r.Hash,t),t=d1(e,t,r.Hash.length)-1,e[t]=10),e.length-t}function bN(r,e,t){return r-=e.Data.length,t.set(e.Data,r),r=d1(t,r,e.Data.length)-1,t[r]=10,r}function EN(r,e){let t=PY(r),n=new Uint8Array(t),i=t,s=e?.fieldOrder==="data-first"?e.fieldOrder:"links-first";if(r.Data&&s==="links-first"&&(i=bN(i,r,n)),r.Links)for(let o=r.Links.length-1;o>=0;o--){let a=kY(r.Links[o],n.subarray(0,i));i-=a,i=d1(n,i,a)-1,n[i]=18}return r.Data&&s==="data-first"&&(i=bN(i,r,n)),n}function RY(r){let e=0;if(r.Hash){let t=r.Hash.length;e+=1+t+wu(t)}if(typeof r.Name=="string"){let t=xN.encode(r.Name).length;e+=1+t+wu(t)}return typeof r.Tsize=="number"&&(e+=1+wu(r.Tsize)),e}function PY(r){let e=0;if(r.Data){let t=r.Data.length;e+=1+t+wu(t)}if(r.Links)for(let t of r.Links){let n=RY(t);e+=1+n+wu(n)}return e}function d1(r,e,t){e-=wu(t);let n=e;for(;t>=CY;)r[e++]=t&127|128,t/=128;for(;t>=128;)r[e++]=t&127|128,t>>>=7;return r[e]=t,n}function wu(r){return r%2===0&&r++,Math.floor((LY(r)+6)/7)}function LY(r){let e=0;return r>=wN&&(r=Math.floor(r/wN),e=32),r>=65536&&(r>>>=16,e+=16),r>=256&&(r>>>=8,e+=8),e+DY[r]}var DY=[0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8];var NY=["Data","Links"],BY=["Hash","Name","Tsize"],jx=new TextEncoder;function vN(r,e){if(r===e)return 0;let t=r.Name?jx.encode(r.Name):[],n=e.Name?jx.encode(e.Name):[],i=t.length,s=n.length;for(let o=0,a=Math.min(i,s);o<a;++o)if(t[o]!==n[o]){i=t[o],s=n[o];break}return i<s?-1:s<i?1:0}function SN(r,e){return!Object.keys(r).some(t=>!e.includes(t))}function AN(r){if(typeof r.asCID=="object"){let t=H.asCID(r);if(!t)throw new TypeError("Invalid DAG-PB form");return{Hash:t}}if(typeof r!="object"||Array.isArray(r))throw new TypeError("Invalid DAG-PB form");let e={};if(r.Hash){let t=H.asCID(r.Hash);try{t||(typeof r.Hash=="string"?t=H.parse(r.Hash):r.Hash instanceof Uint8Array&&(t=H.decode(r.Hash)))}catch(n){throw new TypeError(`Invalid DAG-PB form: ${n.message}`)}t&&(e.Hash=t)}if(!e.Hash)throw new TypeError("Invalid DAG-PB form");return typeof r.Name=="string"&&(e.Name=r.Name),typeof r.Tsize=="number"&&(e.Tsize=r.Tsize),e}function Yx(r){if((r instanceof Uint8Array||typeof r=="string")&&(r={Data:r}),typeof r!="object"||Array.isArray(r))throw new TypeError("Invalid DAG-PB form");let e={};if(r.Data!==void 0)if(typeof r.Data=="string")e.Data=jx.encode(r.Data);else if(r.Data instanceof Uint8Array)e.Data=r.Data;else throw new TypeError("Invalid DAG-PB form");if(r.Links!==void 0)if(Array.isArray(r.Links))e.Links=r.Links.map(AN),e.Links.sort(vN);else throw new TypeError("Invalid DAG-PB form");else e.Links=[];return e}function Xx(r){if(!r||typeof r!="object"||Array.isArray(r)||r instanceof Uint8Array||r["/"]&&r["/"]===r.bytes)throw new TypeError("Invalid DAG-PB form");if(!SN(r,NY))throw new TypeError("Invalid DAG-PB form (extraneous properties)");if(r.Data!==void 0&&!(r.Data instanceof Uint8Array))throw new TypeError("Invalid DAG-PB form (Data must be bytes)");if(!Array.isArray(r.Links))throw new TypeError("Invalid DAG-PB form (Links must be a list)");for(let e=0;e<r.Links.length;e++){let t=r.Links[e];if(!t||typeof t!="object"||Array.isArray(t)||t instanceof Uint8Array||t["/"]&&t["/"]===t.bytes)throw new TypeError("Invalid DAG-PB form (bad link)");if(!SN(t,BY))throw new TypeError("Invalid DAG-PB form (extraneous properties on link)");if(t.Hash===void 0)throw new TypeError("Invalid DAG-PB form (link must have a Hash)");if(t.Hash==null||!t.Hash["/"]||t.Hash["/"]!==t.Hash.bytes)throw new TypeError("Invalid DAG-PB form (link Hash must be a CID)");if(t.Name!==void 0&&typeof t.Name!="string")throw new TypeError("Invalid DAG-PB form (link Name must be a string)");if(t.Tsize!==void 0){if(typeof t.Tsize!="number"||t.Tsize%1!==0)throw new TypeError("Invalid DAG-PB form (link Tsize must be an integer)");if(t.Tsize<0)throw new TypeError("Invalid DAG-PB form (link Tsize cannot be negative)")}if(e>0&&vN(t,r.Links[e-1])===-1)throw new TypeError("Invalid DAG-PB form (links must be sorted by Name bytes)")}}function IN(r,e=[]){return Yx({Data:r,Links:e})}function _N(r,e,t){return AN({Hash:t,Name:r,Tsize:e})}function TN(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var OY="dag-pb",Qx=112;function MY(r,e){Xx(r);let t={};return r.Links&&(t.Links=r.Links.map(n=>{let i={};return n.Hash&&(i.Hash=n.Hash.bytes),n.Name!==void 0&&(i.Name=n.Name),n.Tsize!==void 0&&(i.Tsize=n.Tsize),i})),r.Data&&(t.Data=r.Data),EN(t,e)}function FY(r){let e=TN(r),t=yN(e),n={};return t.Data&&(n.Data=t.Data),t.Links&&(n.Links=t.Links.map(i=>{let s={};try{s.Hash=H.decode(i.Hash)}catch{}if(!s.Hash)throw new Error("Invalid Hash field found in link, expected CID");return i.Name!==void 0&&(s.Name=i.Name),i.Tsize!==void 0&&(s.Tsize=i.Tsize),s})),n}function CN(r=[],e){let t={[Qx]:Zx,[Li]:Ko};return r.forEach(n=>{t[n.code]=n}),async n=>{let i=t[n];if(i==null&&e!=null){let s=e(n);Fs(s)?i=await s:i=s,t[i.code]=i}if(i!=null)return i;throw new Hu(`Could not load codec for ${n}`)}}function kN(r=[],e){let t={};return r=[H6(),z6(),$u(),...r],r.forEach(n=>{t[n.type]=n,t[n.code]=n}),async n=>{let i=t[n];if(i==null&&e!=null){let s=e(n);Fs(s)?i=await s:i=s,t[i.type]=i,t[i.code]=i}if(i!=null)return i;throw new qu(`Could not load crypto for ${i}`)}}function RN(r=[],e){let t={[We.code]:We,[nt.code]:nt};return r.forEach(n=>{t[n.code]=n}),async n=>{let i=t[n];if(i==null&&e!=null){let s=e(n);Fs(s)?i=await s:i=s,t[i.code]=i}if(i!=null)return i;throw new Vu(`No hasher configured for multihash code 0x${n.toString(16)}, please configure one. You can look up which hash this is at https://github.com/multiformats/multicodec/blob/master/table.csv`)}}var G4=0,bu=class extends Error{static name="IdentityHashDigestTooLongError";name="IdentityHashDigestTooLongError"},j4=class extends bs{child;maxDigestLength;constructor(e,t){super(),this.child=e,this.maxDigestLength=t?.maxDigestLength}put(e,t,n){if(e.multihash.code===G4){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new bu(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);return n?.signal?.throwIfAborted(),e}return this.child==null?(n?.signal?.throwIfAborted(),e):this.child.put(e,t,n)}async*get(e,t){if(e.multihash.code===G4){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new bu(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);t?.signal?.throwIfAborted(),yield e.multihash.digest;return}if(this.child==null)throw t?.signal?.throwIfAborted(),new Rr;yield*this.child.get(e,t)}has(e,t){if(e.multihash.code===G4){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new bu(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);return t?.signal?.throwIfAborted(),!0}return this.child==null?(t?.signal?.throwIfAborted(),!1):this.child.has(e,t)}delete(e,t){if(e.code===G4){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new bu(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);t?.signal?.throwIfAborted();return}if(this.child!=null)return this.child.delete(e,t)}async*getAll(e){this.child!=null&&(yield*this.child.getAll(e)),e?.signal?.throwIfAborted()}};var UY=128,xu=class{child;getHasher;log;logger;blockBrokers;constructor(e,t={}){this.log=e.logger.forComponent("helia:networked-storage"),this.logger=e.logger,this.blockBrokers=e.blockBrokers,this.child=new j4(e.blockstore,{maxDigestLength:t.maxIdentityHashDigestLength??UY}),this.getHasher=e.getHasher}async put(e,t,n={}){return await this.child.has(e,n)?(n.onProgress?.(new C("blocks:put:duplicate",e)),e):(n.onProgress?.(new C("blocks:put:blockstore:put",e)),await this.child.put(e,t,n),n.onProgress?.(new C("blocks:put:providers:notify",e)),await Promise.all(this.blockBrokers.map(async i=>i.announce?.(e,n))),e)}async*putMany(e,t={}){let n=qr(e,async({cid:o})=>{let a=await this.child.has(o,t);return a&&t.onProgress?.(new C("blocks:put-many:duplicate",o)),!a});t.onProgress?.(new C("blocks:put-many:blockstore:put-many"));let i=this,s=async function*(o){for await(let a of o)t.onProgress?.(new C("blocks:put-many:blockstore:put",a.cid)),yield a,t.onProgress?.(new C("blocks:put-many:providers:notify",a.cid)),await Promise.all(i.blockBrokers.map(async c=>c.announce?.(a.cid,t)))};yield*this.child.putMany(s(n),t)}async*get(e,t={}){let n=await this.child.has(e,t),i=t.offline===!0;if(!n){if(i)throw new fh("The block was present in the blockstore and the node is running offline so cannot fetch it");let s=await this.getHasher(e.multihash.code);t?.signal?.throwIfAborted(),t.onProgress?.(new C("blocks:get:providers:get",e));let o=await PN(e,this.blockBrokers,s,{...t,log:this.log});t.onProgress?.(new C("blocks:get:blockstore:put",e)),await this.child.put(e,o,t),t.onProgress?.(new C("blocks:get:providers:notify",e)),await Promise.all(this.blockBrokers.map(async a=>a.announce?.(e,t))),yield o;return}t.onProgress?.(new C("blocks:get:blockstore:get",e)),yield*this.child.get(e,t)}async*getMany(e,t={}){t.onProgress?.(new C("blocks:get-many:blockstore:get-many")),yield*this.child.getMany(hd(e,async n=>{let i=await this.child.has(n,t),s=t.offline===!0;if(!i){if(s)throw new fh("The block was present in the blockstore and the node is running offline so cannot fetch it");let o=await this.getHasher(n.multihash.code);t?.signal?.throwIfAborted(),t.onProgress?.(new C("blocks:get-many:providers:get",n));let a=await PN(n,this.blockBrokers,o,{...t,log:this.log});t.onProgress?.(new C("blocks:get-many:blockstore:put",n)),await this.child.put(n,a,t),t.onProgress?.(new C("blocks:get-many:providers:notify",n)),await Promise.all(this.blockBrokers.map(async c=>c.announce?.(n,t)))}}))}async delete(e,t={}){t.onProgress?.(new C("blocks:delete:blockstore:delete",e)),await this.child.delete(e,t)}async*deleteMany(e,t={}){t.onProgress?.(new C("blocks:delete-many:blockstore:delete-many")),yield*this.child.deleteMany((async function*(){for await(let n of e)yield n})(),t)}async has(e,t={}){return this.child.has(e,t)}async*getAll(e={}){e.onProgress?.(new C("blocks:get-all:blockstore:get-many")),yield*this.child.getAll(e)}};async function PN(r,e,t,n){let i=KY(r,t),s=new AbortController,o=he([s.signal,n.signal]);s.signal;let a=[];for(let c of e)$Y(c)&&a.push(c);if(a.length===0)throw new Ki(`No block brokers capable of retrieving blocks are configured, the CID ${r} cannot be fetched from the network`);try{return await Promise.any(a.map(async c=>{try{let l=!1,u=await c.retrieve(r,{...n,signal:o,validateFn:async h=>{await i(h),n.signal?.throwIfAborted(),l=!0}});return l||(await i(u),n.signal?.throwIfAborted()),u}catch(l){throw n.log.error("could not retrieve verified block for %c from %s - %e",r,c.name,l),l}}))}catch(c){throw new Gp(c.errors,`Failed to load block for ${r}`)}finally{s.abort(),o.clear()}}function $Y(r){return typeof r.retrieve=="function"}var KY=(r,e)=>{if(e==null)throw new v(`No hasher configured for multihash code 0x${r.multihash.code.toString(16)}, please configure one. You can look up which hash this is at https://github.com/multiformats/multicodec/blob/master/table.csv`);return async t=>{let n,i=e.digest(t,{truncate:r.multihash.digest.byteLength});if(Fs(i)?n=await i:n=i,!oe(n.digest,r.multihash.digest))throw new Tc("Hash of downloaded block did not match multihash from passed CID")}};var Y4=class extends xu{closeController;constructor(e,t){super(e),this.closeController=new AbortController,this.closeController.signal,this.log=e.logger.forComponent(`helia:session-storage:${t.root}`)}close(){this.closeController.abort()}async addPeer(e,t){await Promise.all(this.blockBrokers.map(n=>n.addPeer(e,t)))}async put(e,t,n={}){let i=he([this.closeController.signal,n.signal]);try{return await super.put(e,t,{...n,signal:i})}finally{i.clear()}}async*putMany(e,t={}){let n=he([this.closeController.signal,t.signal]);try{yield*super.putMany(e,{...t,signal:n})}finally{n.clear()}}async*get(e,t={}){let n=he([this.closeController.signal,t.signal]);try{yield*super.get(e,{...t,signal:n})}finally{n.clear()}}async*getMany(e,t={}){let n=he([this.closeController.signal,t.signal]);try{yield*super.getMany(e,{...t,signal:n})}finally{n.clear()}}async delete(e,t={}){let n=he([this.closeController.signal,t.signal]);try{await super.delete(e,{...t,signal:n})}finally{n.clear()}}async*deleteMany(e,t={}){let n=he([this.closeController.signal,t.signal]);try{yield*super.deleteMany(e,{...t,signal:n})}finally{n.clear()}}async has(e,t={}){let n=he([this.closeController.signal,t.signal]);try{return await super.has(e,{...t,signal:n})}finally{n.clear()}}async*getAll(e={}){let t=he([this.closeController.signal,e.signal]);try{yield*super.getAll({...e,signal:t})}finally{t.clear()}}};var X4=class extends xu{started;constructor(e,t={}){super(e,t),this.started=!1}isStarted(){return this.started}async start(){await ht(this.child,...this.blockBrokers),this.started=!0}async stop(){await It(this.child,...this.blockBrokers),this.started=!1}unwrap(){return this.child}createSession(e,t){if(this.blockBrokers.length===0)throw new Ki("No block brokers configured");let n=this.blockBrokers.map(i=>i.createSession?.(t)).filter(i=>i!=null);if(n.length===0)throw new Ki(`No configured block brokers support sessions - tried ${this.blockBrokers.map(i=>i.name).join(", ")}`);return new Y4({blockstore:this.child,blockBrokers:n,getHasher:this.getHasher,logger:this.logger},{root:e})}};var DN="/pin/",LN="/pinned-block/",Jx=hr;function Q4(r){return r.version===0&&(r=r.toV1()),new $e(`${DN}${r.toString(Jx)}`)}var Z4=class{datastore;blockstore;getCodec;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.getCodec=n}async*add(e,t={}){let n=Q4(e);if(await this.datastore.has(n))throw new qp("Already pinned");let i=Math.round(t.depth??1/0);if(i<0)throw new v("Depth must be greater than or equal to 0");let s=(t.walker??uy())({blockstore:this.blockstore,getCodec:this.getCodec});for await(let a of s.walk(e,{...t,depth:i})){let c=a.block.cid;await this.#e(c,l=>l.pinnedBy.find(u=>oe(u,e.bytes))!=null?!1:(l.pinCount++,l.pinnedBy.push(e.bytes),!0),t),yield c}let o={depth:i,metadata:t.metadata??{}};await this.datastore.put(n,oa(o),t)}async#e(e,t,n){let i=new $e(`${LN}${Jx.encode(e.multihash.bytes)}`),s={pinCount:0,pinnedBy:[]};try{s=On(await this.datastore.get(i,n))}catch(a){if(a.name!=="NotFoundError")throw a}if(t(s)){if(s.pinCount===0&&await this.datastore.has(i)){await this.datastore.delete(i);return}await this.datastore.put(i,oa(s),n),n.onProgress?.(new C("helia:pin:add",e))}}async*rm(e,t={}){let n=Q4(e),i=await this.datastore.get(n,t),s=On(i);await this.datastore.delete(n,t);let o=(t.walker??uy())({blockstore:this.blockstore,getCodec:this.getCodec});for await(let a of o.walk(e,{...t,depth:s.depth})){let c=a.block.cid;await this.#e(c,l=>(l.pinCount--,l.pinnedBy=l.pinnedBy.filter(u=>oe(u,e.bytes)),!0),{...t,depth:s.depth}),yield c}}async*ls(e={}){for await(let{key:t,value:n}of this.datastore.query({prefix:DN+(e.cid!=null?`${e.cid.toString(hr)}`:"")},e)){let i=H.parse(t.toString().substring(5),hr),s=On(n);yield{cid:i,...s}}}async isPinned(e,t={}){let n=new $e(`${LN}${Jx.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}async get(e,t){let n=Q4(e),i=await this.datastore.get(n,t);return On(i)}async setMetadata(e,t,n){let i=Q4(e),s=await this.datastore.get(i,n),o=On(s);o.metadata=t??{},await this.datastore.put(i,oa(o),n)}};var VY=5,J4=class{name;log;routers;providerLookupConcurrency;constructor(e,t){this.name="helia",this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[],this.providerLookupConcurrency=t.providerLookupConcurrency??VY,this.findProviders=e.metrics?.traceFunction("helia.routing.findProviders",this.findProviders.bind(this),{optionsIndex:1})??this.findProviders,this.provide=e.metrics?.traceFunction("helia.routing.provide",this.provide.bind(this),{optionsIndex:1})??this.provide,this.cancelReprovide=e.metrics?.traceFunction("helia.routing.cancelReprovide",this.cancelReprovide.bind(this),{optionsIndex:1})??this.cancelReprovide,this.put=e.metrics?.traceFunction("helia.routing.put",this.put.bind(this),{optionsIndex:2})??this.put,this.get=e.metrics?.traceFunction("helia.routing.get",this.get.bind(this),{optionsIndex:1})??this.get,this.findPeer=e.metrics?.traceFunction("helia.routing.findPeer",this.findPeer.bind(this),{optionsIndex:1})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("helia.routing.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1})??this.getClosestPeers}async start(){await ht(...this.routers)}async stop(){await It(...this.routers)}hasRouter(e){return this.routers.findIndex(t=>t.name===e)!==-1}addRouter(e){this.routers.push(e)}async*findProviders(e,t={}){if(this.routers.length===0)throw new _s("No content routers available");let n=0,i=[],s=this;async function*o(u){let h=0,d=u.map(async function*(p){let g=0;t?.onProgress?.(new C("helia:routing:find-providers:start",{router:p.name,cid:e}));try{for await(let y of p.findProviders(e,t))g++,t?.onProgress?.(new C("helia:routing:find-providers:provider",{router:p.name,cid:e,provider:y})),yield y}catch(y){i.push(y)}finally{s.log("router %s found %d providers for %c",p.name,g,e),t?.onProgress?.(new C("helia:routing:find-providers:end",{router:p.name,cid:e,found:g})),h++,h===u.length&&f.size===0&&f.emitIdle()}}),f=new ct({concurrency:s.providerLookupConcurrency});for await(let p of gr(f.toGenerator(),...d))if(p!=null){if(p.multiaddrs.length===0){if(f.queue.find(g=>g.options.peer.equals(p.id))!=null)continue;f.add(async()=>{try{let g=await s.findPeer(p.id,t);return g.multiaddrs.length===0?null:{...g,protocols:p.protocols,router:p.router,fallback:p.fallback}}catch(g){return s.log.error("could not load multiaddrs for peer %p - %e",p.id,g),null}},{peer:p.id,signal:t.signal}).catch(g=>{s.log.error("could not load multiaddrs for peer %p - %e",p.id,g)});continue}n++,yield p}}let a=Sc(this.routers,"findProviders"),c=a.filter(u=>u.capabilities==null||!u.capabilities().includes("fallback")),l=a.filter(u=>u.capabilities?.().includes("fallback")===!0);this.log("findProviders for %c start using routers %s",e,c.map(u=>u.name).join(", ")),yield*o(c),l.length>0&&(this.log("findProviders for %c using fallback routers %s",e,l.map(u=>u.name).join(", ")),yield*o(l)),this.log("findProviders finished, found %d providers for %c",n,e)}async provide(e,t={}){if(this.routers.length===0)throw new _s("No content routers available");await Promise.all(Sc(this.routers,"provide").map(async n=>{t?.onProgress?.(new C("helia:routing:provide:start",{router:n.name,cid:e})),await n.provide(e,t),t?.onProgress?.(new C("helia:routing:provide:end",{router:n.name,cid:e}))}))}async cancelReprovide(e,t={}){await Promise.all(Sc(this.routers,"cancelReprovide").map(async n=>{t?.onProgress?.(new C("helia:routing:cancel-reprovide:start",{router:n.name,cid:e})),await n.cancelReprovide(e,t),t?.onProgress?.(new C("helia:routing:cancel-reprovide:end",{router:n.name,cid:e}))}))}async put(e,t,n){await Promise.all(Sc(this.routers,"put").map(async i=>{n?.onProgress?.(new C("helia:routing:put:start",{router:i.name,key:e,value:t})),await i.put(e,t,n),n?.onProgress?.(new C("helia:routing:put:end",{router:i.name,key:e,value:t}))}))}async get(e,t){let n=[],i,s=new AbortController,o=he([s.signal,t?.signal]);try{i=await Promise.any(Sc(this.routers,"get").map(async a=>{t?.onProgress?.(new C("helia:routing:get:start",{router:a.name,key:e}));try{return await a.get(e,{...t,signal:o})}catch(c){throw this.log("router %s failed with %e",a.name,c),n.push(c),c}finally{t?.onProgress?.(new C("helia:routing:get:end",{router:a.name,key:e}))}}))}catch{}finally{s.abort(),o.clear()}if(i==null)throw new Wp(n,`Failed to get value key ${T(e,"base58btc")}`);return i}async findPeer(e,t){if(this.routers.length===0)throw new _s("No peer routers available");let n=new AbortController,i=he([n.signal,t?.signal]);let s=this,o=gr(...Sc(this.routers,"findPeer").map(a=>(async function*(){t?.onProgress?.(new C("helia:routing:find-peer:start",{router:a.name,peerId:e}));try{yield await a.findPeer(e,{...t,signal:i})}catch(c){s.log.error(c)}finally{t?.onProgress?.(new C("helia:routing:find-peer:end",{router:a.name,peerId:e}))}})()));try{for await(let a of o)if(a!=null)return a}finally{n.abort(),i.clear()}throw new Ce("Could not find peer in routing")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new _s("No peer routers available");for await(let n of gr(...Sc(this.routers,"getClosestPeers").map(async function*(i){t?.onProgress?.(new C("helia:routing:get-closest-peers:start",{router:i.name,key:e}));try{yield*i.getClosestPeers(e,t)}finally{t?.onProgress?.(new C("helia:routing:get-closest-peers:end",{router:i.name,key:e}))}})))n!=null&&(yield n)}};function Sc(r,e){return r.filter(t=>t[e]!=null)}var e6=class{info;blockstore;datastore;events;pins;logger;routing;getCodec;getHasher;getCrypto;dns;keychain;metrics;status;log;blockBrokers;mixins;components;constructor(e){this.info={name:e.name,version:e.version},this.logger=e.logger??uN(),this.log=this.logger.forComponent("helia"),this.getHasher=RN(e.hashers,e.loadHasher),this.getCodec=CN(e.codecs,e.loadCodec),this.getCrypto=kN(e.cryptos,e.loadCrypto),this.dns=e.dns??ig(),this.metrics=e.metrics,this.events=new pe,this.status="stopped",this.mixins=[],this.components={blockstore:e.blockstore??new h1,datastore:e.datastore??new ja,logger:this.logger,blockBrokers:[],getHasher:this.getHasher,getCodec:this.getCodec,getCrypto:this.getCrypto,dns:this.dns,metrics:this.metrics,...e.components??{}},this.keychain=this.components.keychain=oN()(this.components),this.routing=this.components.routing=new J4(this.components,{routers:(e.routers??[]).flatMap(n=>(typeof n=="function"&&(n=n(this.components)),[n])),providerLookupConcurrency:e.providerLookupConcurrency}),this.blockBrokers=this.components.blockBrokers=(e.blockBrokers??[]).map(n=>(typeof n=="function"&&(n=n(this.components)),n));let t=new X4(this.components,e);this.pins=new Z4(this.components.datastore,t,this.getCodec),this.blockstore=new z4(t,this.pins,this.routing,{holdGcLock:e.holdGcLock??!0}),this.datastore=this.components.datastore}hasRouter(e){return this.routing.hasRouter(e)}addRouter(e){typeof e=="function"&&(e=e(this.components)),this.routing.addRouter(e)}hasBlockBroker(e){return this.blockBrokers.findIndex(t=>t.name===e)!==-1}addBlockBroker(e){typeof e=="function"&&(e=e(this.components)),this.blockBrokers.push(e)}addMixin(e){if(this.mixins.find(t=>t.name===e.name)!=null)throw new Ki(`A mixin with the name "${e.name} is already present`);this.mixins.push(e)}async start(){this.status="starting",await mN(this.datastore),await ht(this.blockstore,this.datastore,this.routing,...this.blockBrokers);for(let e of this.mixins)await e.start?.(this);return this.status="started",this.events.dispatchEvent(new CustomEvent("start",{detail:this})),this}async stop(){this.status="stopping";for(let e of this.mixins)await e.stop?.(this);return await It(this.blockstore,this.datastore,this.routing,...this.blockBrokers),this.status="stopped",this.events.dispatchEvent(new CustomEvent("stop",{detail:this})),this}async gc(e={}){let t=await this.blockstore.lock.writeLock();try{let n=this,i=this.blockstore.unwrap();this.log("gc start"),await kr(i.deleteMany((async function*(){for await(let{cid:s}of i.getAll())try{if(await n.pins.isPinned(s,e))continue;yield s,e.onProgress?.(new C("helia:gc:deleted",s))}catch(o){n.log.error("error during gc - %e",o),e.onProgress?.(new C("helia:gc:error",o))}})()))}finally{t()}this.log("gc finished")}};var NN="7.1.16",BN="helia";function HY(r={}){return f_(jD(B_(ON({...r,codecs:[Ux,qx,k1,...r.codecs??[]],hashers:[P6,...r.hashers??[]]}),r.http),r.libp2p),r.bitswap)}function ON(r={}){return new e6({name:BN,version:NN,...r})}return zN(qY);})();
|
|
114
114
|
/*! Bundled license information:
|
|
115
115
|
|
|
116
116
|
pvtsutils/build/index.js:
|