Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

blockstore-core

Package Overview
Dependencies
Maintainers
2
Versions
35
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

blockstore-core - npm Package Compare versions

Comparing version 3.0.0 to 4.0.0

dist/src/base.js

2

dist/index.min.js
(function (root, factory) {(typeof module === 'object' && module.exports) ? module.exports = factory() : root.BlockstoreCore = factory()}(typeof self !== 'undefined' ? self : this, function () {
"use strict";var BlockstoreCore=(()=>{var Ee=Object.create;var F=Object.defineProperty;var Ae=Object.getOwnPropertyDescriptor;var Se=Object.getOwnPropertyNames;var Ue=Object.getPrototypeOf,ze=Object.prototype.hasOwnProperty;var Oe=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),te=(r,e)=>{for(var t in e)F(r,t,{get:e[t],enumerable:!0})},re=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Se(e))!ze.call(r,o)&&o!==t&&F(r,o,{get:()=>e[o],enumerable:!(n=Ae(e,o))||n.enumerable});return r};var Me=(r,e,t)=>(t=r!=null?Ee(Ue(r)):{},re(e||!r||!r.__esModule?F(t,"default",{value:r,enumerable:!0}):t,r)),Ce=r=>re(F({},"__esModule",{value:!0}),r);var se=Oe((ft,oe)=>{"use strict";function ne(r,e){for(let t in e)Object.defineProperty(r,t,{value:e[t],enumerable:!0,configurable:!0});return r}function ke(r,e,t){if(!r||typeof r=="string")throw new TypeError("Please pass an Error to err-code");t||(t={}),typeof e=="object"&&(t=e,e=""),e&&(t.code=e);try{return ne(r,t)}catch{t.message=r.message,t.stack=r.stack;let o=function(){};return o.prototype=Object.create(Object.getPrototypeOf(r)),ne(new o,t)}}oe.exports=ke});var ct={};te(ct,{BaseBlockstore:()=>C,Errors:()=>at,MemoryBlockstore:()=>J});var R={};te(R,{abortedError:()=>Ne,notFoundError:()=>_});var K=Me(se(),1);function _(r){return r=r||new Error("Not Found"),(0,K.default)(r,"ERR_NOT_FOUND")}function Ne(r){return r=r||new Error("Aborted"),(0,K.default)(r,"ERR_ABORTED")}async function $(r){for await(let e of r);}async function*S(r,e){for await(let t of r)await e(t)&&(yield t)}async function*I(r,e){let t=0;if(!(e<1)){for await(let n of r)if(yield n,t++,t===e)return}}async function G(r){let e=[];for await(let t of r)e.push(t);return e}var ie=(r,e)=>async function*(){yield*(await G(r)).sort(e)}(),C=class{open(){return Promise.reject(new Error(".open is not implemented"))}close(){return Promise.reject(new Error(".close is not implemented"))}put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}get(e,t){return Promise.reject(new Error(".get is not implemented"))}has(e,t){return Promise.reject(new Error(".has is not implemented"))}delete(e,t){return Promise.reject(new Error(".delete is not implemented"))}async*putMany(e,t={}){for await(let{key:n,value:o}of e)await this.put(n,o,t),yield{key:n,value:o}}async*getMany(e,t={}){for await(let n of e)yield this.get(n,t)}async*deleteMany(e,t={}){for await(let n of e)await this.delete(n,t),yield n}batch(){let e=[],t=[];return{put(n,o){e.push({key:n,value:o})},delete(n){t.push(n)},commit:async n=>{await $(this.putMany(e,n)),e=[],await $(this.deleteMany(t,n)),t=[]}}}async*_all(e,t){throw new Error("._all is not implemented")}async*_allKeys(e,t){throw new Error("._allKeys is not implemented")}query(e,t){let n=this._all(e,t);if(e.prefix!=null&&(n=S(n,o=>o.key.toString().startsWith(e.prefix||""))),Array.isArray(e.filters)&&(n=e.filters.reduce((o,s)=>S(o,s),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,s)=>ie(o,s),n)),e.offset!=null){let o=0;n=S(n,()=>o++>=(e.offset||0))}return e.limit!=null&&(n=I(n,e.limit)),n}queryKeys(e,t){let n=this._allKeys(e,t);if(e.prefix!=null&&(n=S(n,o=>o.toString().startsWith(e.prefix||""))),Array.isArray(e.filters)&&(n=e.filters.reduce((o,s)=>S(o,s),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,s)=>ie(o,s),n)),e.offset!=null){let o=0;n=S(n,()=>o++>=e.offset)}return e.limit!=null&&(n=I(n,e.limit)),n}};function Te(r,e){if(r.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),n=0;n<t.length;n++)t[n]=255;for(var o=0;o<r.length;o++){var s=r.charAt(o),i=s.charCodeAt(0);if(t[i]!==255)throw new TypeError(s+" is ambiguous");t[i]=o}var c=r.length,f=r.charAt(0),O=Math.log(c)/Math.log(256),l=Math.log(256)/Math.log(c);function M(a){if(a instanceof Uint8Array||(ArrayBuffer.isView(a)?a=new Uint8Array(a.buffer,a.byteOffset,a.byteLength):Array.isArray(a)&&(a=Uint8Array.from(a))),!(a instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(a.length===0)return"";for(var h=0,U=0,y=0,m=a.length;y!==m&&a[y]===0;)y++,h++;for(var b=(m-y)*l+1>>>0,u=new Uint8Array(b);y!==m;){for(var g=a[y],A=0,w=b-1;(g!==0||A<U)&&w!==-1;w--,A++)g+=256*u[w]>>>0,u[w]=g%c>>>0,g=g/c>>>0;if(g!==0)throw new Error("Non-zero carry");U=A,y++}for(var v=b-U;v!==b&&u[v]===0;)v++;for(var j=f.repeat(h);v<b;++v)j+=r.charAt(u[v]);return j}function P(a){if(typeof a!="string")throw new TypeError("Expected String");if(a.length===0)return new Uint8Array;var h=0;if(a[h]!==" "){for(var U=0,y=0;a[h]===f;)U++,h++;for(var m=(a.length-h)*O+1>>>0,b=new Uint8Array(m);a[h];){var u=t[a.charCodeAt(h)];if(u===255)return;for(var g=0,A=m-1;(u!==0||g<y)&&A!==-1;A--,g++)u+=c*b[A]>>>0,b[A]=u%256>>>0,u=u/256>>>0;if(u!==0)throw new Error("Non-zero carry");y=g,h++}if(a[h]!==" "){for(var w=m-y;w!==m&&b[w]===0;)w++;for(var v=new Uint8Array(U+(m-w)),j=U;w!==m;)v[j++]=b[w++];return v}}}function ve(a){var h=P(a);if(h)return h;throw new Error(`Non-${e} character`)}return{encode:M,decodeUnsafe:P,decode:ve}}var Ve=Te,Be=Ve,ae=Be;var vt=new Uint8Array(0);var ce=(r,e)=>{if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0},z=r=>{if(r instanceof Uint8Array&&r.constructor.name==="Uint8Array")return r;if(r instanceof ArrayBuffer)return new Uint8Array(r);if(ArrayBuffer.isView(r))return new Uint8Array(r.buffer,r.byteOffset,r.byteLength);throw new Error("Unknown type, must be binary type")};var Q=class{constructor(e,t,n){this.name=e,this.prefix=t,this.baseEncode=n}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}},W=class{constructor(e,t,n){if(this.name=e,this.prefix=t,t.codePointAt(0)===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=t.codePointAt(0),this.baseDecode=n}decode(e){if(typeof e=="string"){if(e.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(e)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(e.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(e){return de(this,e)}},X=class{constructor(e){this.decoders=e}or(e){return de(this,e)}decode(e){let t=e[0],n=this.decoders[t];if(n)return n.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}},de=(r,e)=>new X({...r.decoders||{[r.prefix]:r},...e.decoders||{[e.prefix]:e}}),Z=class{constructor(e,t,n,o){this.name=e,this.prefix=t,this.baseEncode=n,this.baseDecode=o,this.encoder=new Q(e,t,n),this.decoder=new W(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}},fe=({name:r,prefix:e,encode:t,decode:n})=>new Z(r,e,t,n),H=({prefix:r,name:e,alphabet:t})=>{let{encode:n,decode:o}=ae(t,e);return fe({prefix:r,name:e,encode:n,decode:s=>z(o(s))})},De=(r,e,t,n)=>{let o={};for(let l=0;l<e.length;++l)o[e[l]]=l;let s=r.length;for(;r[s-1]==="=";)--s;let i=new Uint8Array(s*t/8|0),c=0,f=0,O=0;for(let l=0;l<s;++l){let M=o[r[l]];if(M===void 0)throw new SyntaxError(`Non-${n} character`);f=f<<t|M,c+=t,c>=8&&(c-=8,i[O++]=255&f>>c)}if(c>=t||255&f<<8-c)throw new SyntaxError("Unexpected end of data");return i},Le=(r,e,t)=>{let n=e[e.length-1]==="=",o=(1<<t)-1,s="",i=0,c=0;for(let f=0;f<r.length;++f)for(c=c<<8|r[f],i+=8;i>t;)i-=t,s+=e[o&c>>i];if(i&&(s+=e[o&c<<t-i]),n)for(;s.length*t&7;)s+="=";return s},x=({name:r,prefix:e,bitsPerChar:t,alphabet:n})=>fe({prefix:e,name:r,encode(o){return Le(o,n,t)},decode(o){return De(o,n,t,r)}});var p=x({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),Ot=x({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),Mt=x({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),Ct=x({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),kt=x({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),Nt=x({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),Tt=x({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),Vt=x({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),Bt=x({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var Y=85;var je=ue,he=128,Fe=127,Re=~Fe,$e=Math.pow(2,31);function ue(r,e,t){e=e||[],t=t||0;for(var n=t;r>=$e;)e[t++]=r&255|he,r/=128;for(;r&Re;)e[t++]=r&255|he,r>>>=7;return e[t]=r|0,ue.bytes=t-n+1,e}var Ie=q,Je=128,le=127;function q(r,n){var t=0,n=n||0,o=0,s=n,i,c=r.length;do{if(s>=c)throw q.bytes=0,new RangeError("Could not decode varint");i=r[s++],t+=o<28?(i&le)<<o:(i&le)*Math.pow(2,o),o+=7}while(i>=Je);return q.bytes=s-n,t}var Ke=Math.pow(2,7),_e=Math.pow(2,14),Ge=Math.pow(2,21),Qe=Math.pow(2,28),We=Math.pow(2,35),Xe=Math.pow(2,42),Ze=Math.pow(2,49),He=Math.pow(2,56),Ye=Math.pow(2,63),qe=function(r){return r<Ke?1:r<_e?2:r<Ge?3:r<Qe?4:r<We?5:r<Xe?6:r<Ze?7:r<He?8:r<Ye?9:10},et={encode:je,decode:Ie,encodingLength:qe},tt=et,V=tt;var B=(r,e=0)=>[V.decode(r,e),V.decode.bytes],k=(r,e,t=0)=>(V.encode(r,e,t),e),N=r=>V.encodingLength(r);var ye=(r,e)=>{let t=e.byteLength,n=N(r),o=n+N(t),s=new Uint8Array(o+t);return k(r,s,0),k(t,s,n),s.set(e,o),new T(r,t,e,s)},D=r=>{let e=z(r),[t,n]=B(e),[o,s]=B(e.subarray(n)),i=e.subarray(n+s);if(i.byteLength!==o)throw new Error("Incorrect length");return new T(t,o,i,e)},we=(r,e)=>{if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&ce(r.bytes,t.bytes)}},T=class{constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};var E=H({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),$t=H({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var be=(r,e)=>{let{bytes:t,version:n}=r;switch(n){case 0:return nt(t,ee(r),e||E.encoder);default:return ot(t,ee(r),e||p.encoder)}};var ge=new WeakMap,ee=r=>{let e=ge.get(r);if(e==null){let t=new Map;return ge.set(r,t),t}return e},d=class{constructor(e,t,n,o){this.code=t,this.version=e,this.multihash=n,this.bytes=o,this["/"]=o}get asCID(){return this}get byteOffset(){return this.bytes.byteOffset}get byteLength(){return this.bytes.byteLength}toV0(){switch(this.version){case 0:return this;case 1:{let{code:e,multihash:t}=this;if(e!==L)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==st)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return d.createV0(t)}default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}toV1(){switch(this.version){case 0:{let{code:e,digest:t}=this.multihash,n=ye(e,t);return d.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`)}}equals(e){return d.equals(this,e)}static equals(e,t){let n=t;return n&&e.code===n.code&&e.version===n.version&&we(e.multihash,n.multihash)}toString(e){return be(this,e)}toJSON(){return{"/":be(this)}}link(){return this}get[Symbol.toStringTag](){return"CID"}[Symbol.for("nodejs.util.inspect.custom")](){return`CID(${this.toString()})`}static asCID(e){if(e==null)return null;let t=e;if(t instanceof d)return t;if(t["/"]!=null&&t["/"]===t.bytes||t.asCID===t){let{version:n,code:o,multihash:s,bytes:i}=t;return new d(n,o,s,i||xe(n,o,s.bytes))}else if(t[it]===!0){let{version:n,multihash:o,code:s}=t,i=D(o);return d.create(n,s,i)}else return null}static create(e,t,n){if(typeof t!="number")throw new Error("String codecs are no longer supported");if(!(n.bytes instanceof Uint8Array))throw new Error("Invalid digest");switch(e){case 0:{if(t!==L)throw new Error(`Version 0 CID must use dag-pb (code: ${L}) block encoding`);return new d(e,t,n,n.bytes)}case 1:{let o=xe(e,t,n.bytes);return new d(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return d.create(0,L,e)}static createV1(e,t){return d.create(1,e,t)}static decode(e){let[t,n]=d.decodeFirst(e);if(n.length)throw new Error("Incorrect length");return t}static decodeFirst(e){let t=d.inspectBytes(e),n=t.size-t.multihashSize,o=z(e.subarray(n,n+t.multihashSize));if(o.byteLength!==t.multihashSize)throw new Error("Incorrect length");let s=o.subarray(t.multihashSize-t.digestSize),i=new T(t.multihashCode,t.digestSize,s,o);return[t.version===0?d.createV0(i):d.createV1(t.codec,i),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[M,P]=B(e.subarray(t));return t+=P,M},o=n(),s=L;if(o===18?(o=0,t=0):s=n(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let i=t,c=n(),f=n(),O=t+f,l=O-i;return{version:o,codec:s,multihashCode:c,digestSize:f,multihashSize:l,size:O}}static parse(e,t){let[n,o]=rt(e,t),s=d.decode(o);return ee(s).set(n,e),s}},rt=(r,e)=>{switch(r[0]){case"Q":{let t=e||E;return[E.prefix,t.decode(`${E.prefix}${r}`)]}case E.prefix:{let t=e||E;return[E.prefix,t.decode(r)]}case p.prefix:{let t=e||p;return[p.prefix,t.decode(r)]}default:{if(e==null)throw Error("To parse non base32 or base58btc encoded CID multibase decoder must be provided");return[r[0],e.decode(r)]}}},nt=(r,e,t)=>{let{prefix:n}=t;if(n!==E.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let o=e.get(n);if(o==null){let s=t.encode(r).slice(1);return e.set(n,s),s}else return o},ot=(r,e,t)=>{let{prefix:n}=t,o=e.get(n);if(o==null){let s=t.encode(r);return e.set(n,s),s}else return o},L=112,st=18,xe=(r,e,t)=>{let n=N(r),o=n+N(e),s=new Uint8Array(o+t.byteLength);return k(r,s,0),k(e,s,n),s.set(t,o),s},it=Symbol.for("@ipld/js-cid/CID");var J=class extends C{constructor(){super(),this.data={}}open(){return Promise.resolve()}close(){return Promise.resolve()}async put(e,t){this.data[p.encode(e.multihash.bytes)]=t}async get(e){if(!await this.has(e))throw _();return this.data[p.encode(e.multihash.bytes)]}async has(e){return this.data[p.encode(e.multihash.bytes)]!==void 0}async delete(e){delete this.data[p.encode(e.multihash.bytes)]}async*_all(){yield*Object.entries(this.data).map(([e,t])=>({key:d.createV1(Y,D(p.decode(e))),value:t}))}async*_allKeys(){yield*Object.entries(this.data).map(([e])=>d.createV1(Y,D(p.decode(e))))}};var at={...R};return Ce(ct);})();
"use strict";var BlockstoreCore=(()=>{var be=Object.create;var B=Object.defineProperty;var me=Object.getOwnPropertyDescriptor;var ge=Object.getOwnPropertyNames;var xe=Object.getPrototypeOf,ve=Object.prototype.hasOwnProperty;var Ee=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),W=(r,e)=>{for(var t in e)B(r,t,{get:e[t],enumerable:!0})},Z=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of ge(e))!ve.call(r,o)&&o!==t&&B(r,o,{get:()=>e[o],enumerable:!(n=me(e,o))||n.enumerable});return r};var Ae=(r,e,t)=>(t=r!=null?be(xe(r)):{},Z(e||!r||!r.__esModule?B(t,"default",{value:r,enumerable:!0}):t,r)),Se=r=>Z(B({},"__esModule",{value:!0}),r);var ee=Ee((dt,Y)=>{"use strict";function H(r,e){for(let t in e)Object.defineProperty(r,t,{value:e[t],enumerable:!0,configurable:!0});return r}function Ue(r,e,t){if(!r||typeof r=="string")throw new TypeError("Please pass an Error to err-code");t||(t={}),typeof e=="object"&&(t=e,e=""),e&&(t.code=e);try{return H(r,t)}catch{t.message=r.message,t.stack=r.stack;let o=function(){};return o.prototype=Object.create(Object.getPrototypeOf(r)),H(new o,t)}}Y.exports=Ue});var at={};W(at,{BaseBlockstore:()=>M,Errors:()=>it,MemoryBlockstore:()=>$});var I={};W(I,{abortedError:()=>De,closeFailedError:()=>Oe,deleteFailedError:()=>Me,notFoundError:()=>j,openFailedError:()=>ze,putFailedError:()=>Ce});var U=Ae(ee(),1);function ze(r){return r=r??new Error("Open failed"),(0,U.default)(r,"ERR_OPEN_FAILED")}function Oe(r){return r=r??new Error("Close failed"),(0,U.default)(r,"ERR_CLOSE_FAILED")}function Ce(r){return r=r??new Error("Put failed"),(0,U.default)(r,"ERR_PUT_FAILED")}function Me(r){return r=r??new Error("Delete failed"),(0,U.default)(r,"ERR_DELETE_FAILED")}function j(r){return r=r??new Error("Not Found"),(0,U.default)(r,"ERR_NOT_FOUND")}function De(r){return r=r??new Error("Aborted"),(0,U.default)(r,"ERR_ABORTED")}var M=class{async has(e,t){return await Promise.reject(new Error(".has is not implemented"))}async put(e,t,n){await Promise.reject(new Error(".put is not implemented"))}async*putMany(e,t){for await(let{cid:n,block:o}of e)await this.put(n,o,t),yield{cid:n,block:o}}async get(e,t){return await Promise.reject(new Error(".get is not implemented"))}async*getMany(e,t){for await(let n of e)yield this.get(n,t)}async delete(e,t){await 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 Ne(r,e){if(r.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),n=0;n<t.length;n++)t[n]=255;for(var o=0;o<r.length;o++){var s=r.charAt(o),i=s.charCodeAt(0);if(t[i]!==255)throw new TypeError(s+" is ambiguous");t[i]=o}var c=r.length,h=r.charAt(0),O=Math.log(c)/Math.log(256),p=Math.log(256)/Math.log(c);function C(a){if(a instanceof Uint8Array||(ArrayBuffer.isView(a)?a=new Uint8Array(a.buffer,a.byteOffset,a.byteLength):Array.isArray(a)&&(a=Uint8Array.from(a))),!(a instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(a.length===0)return"";for(var f=0,S=0,u=0,b=a.length;u!==b&&a[u]===0;)u++,f++;for(var m=(b-u)*p+1>>>0,l=new Uint8Array(m);u!==b;){for(var g=a[u],A=0,w=m-1;(g!==0||A<S)&&w!==-1;w--,A++)g+=256*l[w]>>>0,l[w]=g%c>>>0,g=g/c>>>0;if(g!==0)throw new Error("Non-zero carry");S=A,u++}for(var v=m-S;v!==m&&l[v]===0;)v++;for(var V=h.repeat(f);v<m;++v)V+=r.charAt(l[v]);return V}function T(a){if(typeof a!="string")throw new TypeError("Expected String");if(a.length===0)return new Uint8Array;var f=0;if(a[f]!==" "){for(var S=0,u=0;a[f]===h;)S++,f++;for(var b=(a.length-f)*O+1>>>0,m=new Uint8Array(b);a[f];){var l=t[a.charCodeAt(f)];if(l===255)return;for(var g=0,A=b-1;(l!==0||g<u)&&A!==-1;A--,g++)l+=c*m[A]>>>0,m[A]=l%256>>>0,l=l/256>>>0;if(l!==0)throw new Error("Non-zero carry");u=g,f++}if(a[f]!==" "){for(var w=b-u;w!==b&&m[w]===0;)w++;for(var v=new Uint8Array(S+(b-w)),V=S;w!==b;)v[V++]=m[w++];return v}}}function ye(a){var f=T(a);if(f)return f;throw new Error(`Non-${e} character`)}return{encode:C,decodeUnsafe:T,decode:ye}}var ke=Ne,Fe=ke,te=Fe;var pt=new Uint8Array(0);var re=(r,e)=>{if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0},z=r=>{if(r instanceof Uint8Array&&r.constructor.name==="Uint8Array")return r;if(r instanceof ArrayBuffer)return new Uint8Array(r);if(ArrayBuffer.isView(r))return new Uint8Array(r.buffer,r.byteOffset,r.byteLength);throw new Error("Unknown type, must be binary type")};var q=class{constructor(e,t,n){this.name=e,this.prefix=t,this.baseEncode=n}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}},J=class{constructor(e,t,n){if(this.name=e,this.prefix=t,t.codePointAt(0)===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=t.codePointAt(0),this.baseDecode=n}decode(e){if(typeof e=="string"){if(e.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(e)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(e.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(e){return ne(this,e)}},_=class{constructor(e){this.decoders=e}or(e){return ne(this,e)}decode(e){let t=e[0],n=this.decoders[t];if(n)return n.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}},ne=(r,e)=>new _({...r.decoders||{[r.prefix]:r},...e.decoders||{[e.prefix]:e}}),Q=class{constructor(e,t,n,o){this.name=e,this.prefix=t,this.baseEncode=n,this.baseDecode=o,this.encoder=new q(e,t,n),this.decoder=new J(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}},oe=({name:r,prefix:e,encode:t,decode:n})=>new Q(r,e,t,n),G=({prefix:r,name:e,alphabet:t})=>{let{encode:n,decode:o}=te(t,e);return oe({prefix:r,name:e,encode:n,decode:s=>z(o(s))})},Le=(r,e,t,n)=>{let o={};for(let p=0;p<e.length;++p)o[e[p]]=p;let s=r.length;for(;r[s-1]==="=";)--s;let i=new Uint8Array(s*t/8|0),c=0,h=0,O=0;for(let p=0;p<s;++p){let C=o[r[p]];if(C===void 0)throw new SyntaxError(`Non-${n} character`);h=h<<t|C,c+=t,c>=8&&(c-=8,i[O++]=255&h>>c)}if(c>=t||255&h<<8-c)throw new SyntaxError("Unexpected end of data");return i},Re=(r,e,t)=>{let n=e[e.length-1]==="=",o=(1<<t)-1,s="",i=0,c=0;for(let h=0;h<r.length;++h)for(c=c<<8|r[h],i+=8;i>t;)i-=t,s+=e[o&c>>i];if(i&&(s+=e[o&c<<t-i]),n)for(;s.length*t&7;)s+="=";return s},x=({name:r,prefix:e,bitsPerChar:t,alphabet:n})=>oe({prefix:e,name:r,encode(o){return Re(o,n,t)},decode(o){return Le(o,n,t,r)}});var y=x({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),mt=x({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),gt=x({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),xt=x({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),vt=x({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),Et=x({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),At=x({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),St=x({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),Ut=x({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var se=85;var Ve=ce,ie=128,Be=127,Ie=~Be,Pe=Math.pow(2,31);function ce(r,e,t){e=e||[],t=t||0;for(var n=t;r>=Pe;)e[t++]=r&255|ie,r/=128;for(;r&Ie;)e[t++]=r&255|ie,r>>>=7;return e[t]=r|0,ce.bytes=t-n+1,e}var $e=X,je=128,ae=127;function X(r,n){var t=0,n=n||0,o=0,s=n,i,c=r.length;do{if(s>=c)throw X.bytes=0,new RangeError("Could not decode varint");i=r[s++],t+=o<28?(i&ae)<<o:(i&ae)*Math.pow(2,o),o+=7}while(i>=je);return X.bytes=s-n,t}var qe=Math.pow(2,7),Je=Math.pow(2,14),_e=Math.pow(2,21),Qe=Math.pow(2,28),Ge=Math.pow(2,35),Xe=Math.pow(2,42),Ke=Math.pow(2,49),We=Math.pow(2,56),Ze=Math.pow(2,63),He=function(r){return r<qe?1:r<Je?2:r<_e?3:r<Qe?4:r<Ge?5:r<Xe?6:r<Ke?7:r<We?8:r<Ze?9:10},Ye={encode:Ve,decode:$e,encodingLength:He},et=Ye,F=et;var L=(r,e=0)=>[F.decode(r,e),F.decode.bytes],D=(r,e,t=0)=>(F.encode(r,e,t),e),N=r=>F.encodingLength(r);var he=(r,e)=>{let t=e.byteLength,n=N(r),o=n+N(t),s=new Uint8Array(o+t);return D(r,s,0),D(t,s,n),s.set(e,o),new k(r,t,e,s)},P=r=>{let e=z(r),[t,n]=L(e),[o,s]=L(e.subarray(n)),i=e.subarray(n+s);if(i.byteLength!==o)throw new Error("Incorrect length");return new k(t,o,i,e)},fe=(r,e)=>{if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&re(r.bytes,t.bytes)}},k=class{constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};var E=G({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),kt=G({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var le=(r,e)=>{let{bytes:t,version:n}=r;switch(n){case 0:return rt(t,K(r),e||E.encoder);default:return nt(t,K(r),e||y.encoder)}};var ue=new WeakMap,K=r=>{let e=ue.get(r);if(e==null){let t=new Map;return ue.set(r,t),t}return e},d=class{constructor(e,t,n,o){this.code=t,this.version=e,this.multihash=n,this.bytes=o,this["/"]=o}get asCID(){return this}get byteOffset(){return this.bytes.byteOffset}get byteLength(){return this.bytes.byteLength}toV0(){switch(this.version){case 0:return this;case 1:{let{code:e,multihash:t}=this;if(e!==R)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==ot)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return d.createV0(t)}default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}toV1(){switch(this.version){case 0:{let{code:e,digest:t}=this.multihash,n=he(e,t);return d.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`)}}equals(e){return d.equals(this,e)}static equals(e,t){let n=t;return n&&e.code===n.code&&e.version===n.version&&fe(e.multihash,n.multihash)}toString(e){return le(this,e)}toJSON(){return{"/":le(this)}}link(){return this}get[Symbol.toStringTag](){return"CID"}[Symbol.for("nodejs.util.inspect.custom")](){return`CID(${this.toString()})`}static asCID(e){if(e==null)return null;let t=e;if(t instanceof d)return t;if(t["/"]!=null&&t["/"]===t.bytes||t.asCID===t){let{version:n,code:o,multihash:s,bytes:i}=t;return new d(n,o,s,i||we(n,o,s.bytes))}else if(t[st]===!0){let{version:n,multihash:o,code:s}=t,i=P(o);return d.create(n,s,i)}else return null}static create(e,t,n){if(typeof t!="number")throw new Error("String codecs are no longer supported");if(!(n.bytes instanceof Uint8Array))throw new Error("Invalid digest");switch(e){case 0:{if(t!==R)throw new Error(`Version 0 CID must use dag-pb (code: ${R}) block encoding`);return new d(e,t,n,n.bytes)}case 1:{let o=we(e,t,n.bytes);return new d(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return d.create(0,R,e)}static createV1(e,t){return d.create(1,e,t)}static decode(e){let[t,n]=d.decodeFirst(e);if(n.length)throw new Error("Incorrect length");return t}static decodeFirst(e){let t=d.inspectBytes(e),n=t.size-t.multihashSize,o=z(e.subarray(n,n+t.multihashSize));if(o.byteLength!==t.multihashSize)throw new Error("Incorrect length");let s=o.subarray(t.multihashSize-t.digestSize),i=new k(t.multihashCode,t.digestSize,s,o);return[t.version===0?d.createV0(i):d.createV1(t.codec,i),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[C,T]=L(e.subarray(t));return t+=T,C},o=n(),s=R;if(o===18?(o=0,t=0):s=n(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let i=t,c=n(),h=n(),O=t+h,p=O-i;return{version:o,codec:s,multihashCode:c,digestSize:h,multihashSize:p,size:O}}static parse(e,t){let[n,o]=tt(e,t),s=d.decode(o);if(s.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return K(s).set(n,e),s}},tt=(r,e)=>{switch(r[0]){case"Q":{let t=e||E;return[E.prefix,t.decode(`${E.prefix}${r}`)]}case E.prefix:{let t=e||E;return[E.prefix,t.decode(r)]}case y.prefix:{let t=e||y;return[y.prefix,t.decode(r)]}default:{if(e==null)throw Error("To parse non base32 or base58btc encoded CID multibase decoder must be provided");return[r[0],e.decode(r)]}}},rt=(r,e,t)=>{let{prefix:n}=t;if(n!==E.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let o=e.get(n);if(o==null){let s=t.encode(r).slice(1);return e.set(n,s),s}else return o},nt=(r,e,t)=>{let{prefix:n}=t,o=e.get(n);if(o==null){let s=t.encode(r);return e.set(n,s),s}else return o},R=112,ot=18,we=(r,e,t)=>{let n=N(r),o=n+N(e),s=new Uint8Array(o+t.byteLength);return D(r,s,0),D(e,s,n),s.set(t,o),s},st=Symbol.for("@ipld/js-cid/CID");var $=class extends M{constructor(){super(),this.data=new Map}async put(e,t){this.data.set(y.encode(e.multihash.bytes),t)}async get(e){let t=this.data.get(y.encode(e.multihash.bytes));if(t==null)throw j();return t}async has(e){return this.data.has(y.encode(e.multihash.bytes))}async delete(e){this.data.delete(y.encode(e.multihash.bytes))}async*getAll(){for(let[e,t]of this.data.entries())yield{cid:d.createV1(se,P(y.decode(e))),block:t}}};var it={...I};return Se(at);})();
return BlockstoreCore}));

@@ -1,109 +0,17 @@

/**
* @typedef {import('interface-blockstore').Options} Options
* @typedef {import('interface-blockstore').Pair} Pair
* @typedef {import('interface-blockstore').Blockstore} Blockstore
* @typedef {import('interface-blockstore').Query} Query
* @typedef {import('interface-blockstore').KeyQuery} KeyQuery
* @typedef {import('interface-blockstore').Batch} Batch
*
* @typedef {import('multiformats').CID} CID
*/
/**
* @template O
* @typedef {import('interface-store').AwaitIterable<O>} AwaitIterable
*/
/**
* @implements {Blockstore}
*/
export class BaseBlockstore implements Blockstore {
import type { Blockstore, Options, Pair } from 'interface-blockstore';
import type { CID } from 'multiformats/cid';
import type { AwaitIterable } from 'interface-store';
export declare class BaseBlockstore implements Blockstore {
has(key: CID, options?: Options): Promise<boolean>;
put(key: CID, val: Uint8Array, options?: Options): Promise<void>;
putMany(source: AwaitIterable<Pair>, options?: Options): AsyncIterable<Pair>;
get(key: CID, options?: Options): Promise<Uint8Array>;
getMany(source: AwaitIterable<CID>, options?: Options): AsyncIterable<Uint8Array>;
delete(key: CID, options?: Options): Promise<void>;
deleteMany(source: AwaitIterable<CID>, options?: Options): AsyncIterable<CID>;
/**
* @returns {Promise<void>}
*/
open(): Promise<void>;
/**
* @returns {Promise<void>}
*/
close(): Promise<void>;
/**
* @param {CID} key
* @param {Uint8Array} val
* @param {Options} [options]
* @returns {Promise<void>}
*/
put(key: CID, val: Uint8Array, options?: import("interface-blockstore").Options | undefined): Promise<void>;
/**
* @param {CID} key
* @param {Options} [options]
* @returns {Promise<Uint8Array>}
*/
get(key: CID, options?: import("interface-blockstore").Options | undefined): Promise<Uint8Array>;
/**
* @param {CID} key
* @param {Options} [options]
* @returns {Promise<boolean>}
*/
has(key: CID, options?: import("interface-blockstore").Options | undefined): Promise<boolean>;
/**
* @param {CID} key
* @param {Options} [options]
* @returns {Promise<void>}
*/
delete(key: CID, options?: import("interface-blockstore").Options | undefined): Promise<void>;
/**
* @param {AwaitIterable<Pair>} source
* @param {Options} [options]
* @returns {AsyncIterable<Pair>}
*/
putMany(source: AwaitIterable<Pair>, options?: import("interface-blockstore").Options | undefined): AsyncIterable<Pair>;
/**
* @param {AwaitIterable<CID>} source
* @param {Options} [options]
* @returns {AsyncIterable<Uint8Array>}
*/
getMany(source: AwaitIterable<CID>, options?: import("interface-blockstore").Options | undefined): AsyncIterable<Uint8Array>;
/**
* @param {AwaitIterable<CID>} source
* @param {Options} [options]
* @returns {AsyncIterable<CID>}
*/
deleteMany(source: AwaitIterable<CID>, options?: import("interface-blockstore").Options | undefined): AsyncIterable<CID>;
/**
* @returns {Batch}
*/
batch(): Batch;
/**
* Extending classes should override `query` or implement this method
*
* @param {Query} q
* @param {Options} [options]
* @returns {AsyncIterable<Pair>}
*/
_all(q: Query, options?: import("interface-blockstore").Options | undefined): AsyncIterable<Pair>;
/**
* Extending classes should override `queryKeys` or implement this method
*
* @param {KeyQuery} q
* @param {Options} [options]
* @returns {AsyncIterable<CID>}
*/
_allKeys(q: KeyQuery, options?: import("interface-blockstore").Options | undefined): AsyncIterable<CID>;
/**
* @param {Query} q
* @param {Options} [options]
*/
query(q: Query, options?: import("interface-blockstore").Options | undefined): AsyncIterable<import("interface-blockstore").Pair>;
/**
* @param {KeyQuery} q
* @param {Options} [options]
*/
queryKeys(q: KeyQuery, options?: import("interface-blockstore").Options | undefined): AsyncIterable<import("multiformats").CID<any, number, number, import("multiformats").Version>>;
getAll(options?: Options): AwaitIterable<Pair>;
}
export type Options = import('interface-blockstore').Options;
export type Pair = import('interface-blockstore').Pair;
export type Blockstore = import('interface-blockstore').Blockstore;
export type Query = import('interface-blockstore').Query;
export type KeyQuery = import('interface-blockstore').KeyQuery;
export type Batch = import('interface-blockstore').Batch;
export type CID = import('multiformats').CID;
export type AwaitIterable<O> = import('interface-store').AwaitIterable<O>;
//# sourceMappingURL=base.d.ts.map

@@ -1,10 +0,7 @@

/**
* @param {Error} [err]
*/
export function notFoundError(err?: Error | undefined): Error & errCode.Extensions;
/**
* @param {Error} [err]
*/
export function abortedError(err?: Error | undefined): Error & errCode.Extensions;
import errCode from "err-code";
export declare function openFailedError(err?: Error): Error;
export declare function closeFailedError(err?: Error): Error;
export declare function putFailedError(err?: Error): Error;
export declare function deleteFailedError(err?: Error): Error;
export declare function notFoundError(err?: Error): Error;
export declare function abortedError(err?: Error): Error;
//# sourceMappingURL=errors.d.ts.map

@@ -1,7 +0,11 @@

export { BaseBlockstore } from "./base.js";
export { MemoryBlockstore } from "./memory.js";
export const Errors: {
notFoundError(err?: Error | undefined): Error & import("err-code").Extensions;
abortedError(err?: Error | undefined): Error & import("err-code").Extensions;
export { BaseBlockstore } from './base.js';
export { MemoryBlockstore } from './memory.js';
export declare const Errors: {
openFailedError(err?: Error | undefined): Error;
closeFailedError(err?: Error | undefined): Error;
putFailedError(err?: Error | undefined): Error;
deleteFailedError(err?: Error | undefined): Error;
notFoundError(err?: Error | undefined): Error;
abortedError(err?: Error | undefined): Error;
};
//# sourceMappingURL=index.d.ts.map

@@ -1,41 +0,14 @@

/**
* @typedef {import('interface-blockstore').Pair} Pair
* @typedef {import('interface-blockstore').Blockstore} Blockstore
* @typedef {import('interface-store').Options} Options
*/
/**
* @class MemoryBlockstore
* @implements {Blockstore}
*/
export class MemoryBlockstore extends BaseBlockstore implements Blockstore {
/** @type {Record<string, Uint8Array>} */
data: Record<string, Uint8Array>;
/**
* @param {CID} key
* @param {Uint8Array} val
*/
import { BaseBlockstore } from './base.js';
import { CID } from 'multiformats/cid';
import type { AwaitIterable } from 'interface-store';
import type { Pair } from 'interface-blockstore';
export declare class MemoryBlockstore extends BaseBlockstore {
private readonly data;
constructor();
put(key: CID, val: Uint8Array): Promise<void>;
/**
* @param {CID} key
*/
get(key: CID): Promise<Uint8Array>;
/**
* @param {CID} key
*/
has(key: CID): Promise<boolean>;
/**
* @param {CID} key
*/
delete(key: CID): Promise<void>;
_all(): AsyncGenerator<{
key: CID<unknown, 85, number, 1>;
value: Uint8Array;
}, void, undefined>;
_allKeys(): AsyncGenerator<CID<unknown, 85, number, 1>, void, undefined>;
getAll(): AwaitIterable<Pair>;
}
export type Pair = import('interface-blockstore').Pair;
export type Blockstore = import('interface-blockstore').Blockstore;
export type Options = import('interface-store').Options;
import { BaseBlockstore } from "./base.js";
import { CID } from "multiformats/cid";
//# sourceMappingURL=memory.d.ts.map
{
"BaseBlockstore": "https://ipfs.github.io/js-blockstore-core/classes/base.BaseBlockstore.html",
"CID": "https://ipfs.github.io/js-blockstore-core/types/base.CID.html",
"abortedError": "https://ipfs.github.io/js-blockstore-core/functions/errors.abortedError.html",
"closeFailedError": "https://ipfs.github.io/js-blockstore-core/functions/errors.closeFailedError.html",
"deleteFailedError": "https://ipfs.github.io/js-blockstore-core/functions/errors.deleteFailedError.html",
"notFoundError": "https://ipfs.github.io/js-blockstore-core/functions/errors.notFoundError.html",
"openFailedError": "https://ipfs.github.io/js-blockstore-core/functions/errors.openFailedError.html",
"putFailedError": "https://ipfs.github.io/js-blockstore-core/functions/errors.putFailedError.html",
"Errors": "https://ipfs.github.io/js-blockstore-core/variables/index.Errors.html",
"MemoryBlockstore": "https://ipfs.github.io/js-blockstore-core/classes/memory.MemoryBlockstore.html"
}
{
"name": "blockstore-core",
"version": "3.0.0",
"version": "4.0.0",
"description": "Contains various implementations of the API contract described in interface-blockstore",

@@ -52,15 +52,15 @@ "author": "Alex Potsides <alex.potsides@protocol.ai>",

"types": "./dist/src/index.d.ts",
"import": "./src/index.js"
"import": "./dist/src/index.js"
},
"./base": {
"types": "./src/base.d.ts",
"import": "./src/base.js"
"types": "./dist/src/base.d.ts",
"import": "./dist/src/base.js"
},
"./errors": {
"types": "./src/errors.d.ts",
"import": "./src/errors.js"
"types": "./dist/src/errors.d.ts",
"import": "./dist/src/errors.js"
},
"./memory": {
"types": "./src/memory.d.ts",
"import": "./src/memory.js"
"types": "./dist/src/memory.d.ts",
"import": "./dist/src/memory.js"
}

@@ -176,14 +176,10 @@ },

"err-code": "^3.0.1",
"interface-blockstore": "^4.0.0",
"interface-store": "^3.0.0",
"it-all": "^2.0.0",
"it-drain": "^2.0.0",
"it-filter": "^2.0.0",
"it-take": "^2.0.0",
"interface-blockstore": "^5.0.0",
"interface-store": "^4.0.0",
"multiformats": "^11.0.0"
},
"devDependencies": {
"aegir": "^37.9.0",
"interface-blockstore-tests": "^4.0.0"
"aegir": "^38.1.7",
"interface-blockstore-tests": "^5.0.0"
}
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc