@libp2p/record 3.0.3 → 3.0.4-3e515f007

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/README.md CHANGED
@@ -1,28 +1,60 @@
1
- # @libp2p/record <!-- omit in toc -->
1
+ # @libp2p/record
2
2
 
3
3
  [![libp2p.io](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](http://libp2p.io/)
4
4
  [![Discuss](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg?style=flat-square)](https://discuss.libp2p.io)
5
- [![codecov](https://img.shields.io/codecov/c/github/libp2p/js-libp2p-record.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-record)
6
- [![CI](https://img.shields.io/github/actions/workflow/status/libp2p/js-libp2p-record/js-test-and-release.yml?branch=master\&style=flat-square)](https://github.com/libp2p/js-libp2p-record/actions/workflows/js-test-and-release.yml?query=branch%3Amaster)
5
+ [![codecov](https://img.shields.io/codecov/c/github/libp2p/js-libp2p.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p)
6
+ [![CI](https://img.shields.io/github/actions/workflow/status/libp2p/js-libp2p/main.yml?branch=main\&style=flat-square)](https://github.com/libp2p/js-libp2p/actions/workflows/main.yml?query=branch%3Amain)
7
7
 
8
8
  > libp2p record implementation
9
9
 
10
- ## Table of contents <!-- omit in toc -->
10
+ # About
11
11
 
12
- - [Install](#install)
13
- - [Browser `<script>` tag](#browser-script-tag)
14
- - [Description](#description)
15
- - [API Docs](#api-docs)
16
- - [License](#license)
17
- - [Contribution](#contribution)
12
+ <!--
18
13
 
19
- ## Install
14
+ !IMPORTANT!
15
+
16
+ Everything in this README between "# About" and "# Install" is automatically
17
+ generated and will be overwritten the next time the doc generator is run.
18
+
19
+ To make changes to this section, please update the @packageDocumentation section
20
+ of src/index.js or src/index.ts
21
+
22
+ To experiment with formatting, please run "npm run docs" from the root of this
23
+ repo and examine the changes made.
24
+
25
+ -->
26
+
27
+ This is an implementation of the [routing record format](https://github.com/libp2p/specs/blob/b9efe152c29f93f7a87931c14d78ae11e7924d5a/kad-dht/README.md?plain=1#L408-L425) used by libp2p to store data in the datastore passed to the libp2p constructor.
28
+
29
+ ## Example - Deserialization
30
+
31
+ ```TypeScript
32
+ import { Libp2pRecord } from '@libp2p/record'
33
+
34
+ const buf = Uint8Array.from([0, 1, 2, 3])
35
+ const record = Libp2pRecord.deserialize(buf)
36
+ ```
37
+
38
+ ## Example - Serialization
39
+
40
+ ```TypeScript
41
+ import { Libp2pRecord } from '@libp2p/record'
42
+
43
+ const key = Uint8Array.from([0, 1, 2, 3])
44
+ const value = Uint8Array.from([0, 1, 2, 3])
45
+ const timeReceived = new Date()
46
+
47
+ const record = new Libp2pRecord(key, value, timeReceived)
48
+ const buf = record.serialize()
49
+ ```
50
+
51
+ # Install
20
52
 
21
53
  ```console
22
54
  $ npm i @libp2p/record
23
55
  ```
24
56
 
25
- ### Browser `<script>` tag
57
+ ## Browser `<script>` tag
26
58
 
27
59
  Loading this module through a script tag will make it's exports available as `Libp2pRecord` in the global namespace.
28
60
 
@@ -30,21 +62,17 @@ Loading this module through a script tag will make it's exports available as `Li
30
62
  <script src="https://unpkg.com/@libp2p/record/dist/index.min.js"></script>
31
63
  ```
32
64
 
33
- ## Description
34
-
35
- Implementation of [go-libp2p-record](https://github.com/libp2p/go-libp2p-record) in JavaScript.
36
-
37
- ## API Docs
65
+ # API Docs
38
66
 
39
- - <https://libp2p.github.io/js-libp2p-record>
67
+ - <https://libp2p.github.io/js-libp2p/modules/_libp2p_record.html>
40
68
 
41
- ## License
69
+ # License
42
70
 
43
71
  Licensed under either of
44
72
 
45
73
  - Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)
46
74
  - MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)
47
75
 
48
- ## Contribution
76
+ # Contribution
49
77
 
50
78
  Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
package/dist/index.min.js CHANGED
@@ -1,3 +1,3 @@
1
1
  (function (root, factory) {(typeof module === 'object' && module.exports) ? module.exports = factory() : root.Libp2PRecord = factory()}(typeof self !== 'undefined' ? self : this, function () {
2
- "use strict";var Libp2PRecord=(()=>{var Yt=Object.create;var R=Object.defineProperty;var te=Object.getOwnPropertyDescriptor;var ee=Object.getOwnPropertyNames;var re=Object.getPrototypeOf,ne=Object.prototype.hasOwnProperty;var g=(r,t)=>()=>(t||r((t={exports:{}}).exports,t),t.exports),ie=(r,t)=>{for(var e in t)R(r,e,{get:t[e],enumerable:!0})},st=(r,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of ee(t))!ne.call(r,i)&&i!==e&&R(r,i,{get:()=>t[i],enumerable:!(n=te(t,i))||n.enumerable});return r};var D=(r,t,e)=>(e=r!=null?Yt(re(r)):{},st(t||!r||!r.__esModule?R(e,"default",{value:r,enumerable:!0}):e,r)),oe=r=>st(R({},"__esModule",{value:!0}),r);var at=g((Be,ut)=>{"use strict";ut.exports=se;function se(r,t){for(var e=new Array(arguments.length-1),n=0,i=2,s=!0;i<arguments.length;)e[n++]=arguments[i++];return new Promise(function(f,o){e[n]=function(c){if(s)if(s=!1,c)o(c);else{for(var y=new Array(arguments.length-1),A=0;A<y.length;)y[A++]=arguments[A];f.apply(null,y)}};try{r.apply(t||null,e)}catch(u){s&&(s=!1,o(u))}})}});var lt=g(ct=>{"use strict";var z=ct;z.length=function(t){var e=t.length;if(!e)return 0;for(var n=0;--e%4>1&&t.charAt(e)==="=";)++n;return Math.ceil(t.length*3)/4-n};var L=new Array(64),ht=new Array(123);for(w=0;w<64;)ht[L[w]=w<26?w+65:w<52?w+71:w<62?w-4:w-59|43]=w++;var w;z.encode=function(t,e,n){for(var i=null,s=[],a=0,f=0,o;e<n;){var u=t[e++];switch(f){case 0:s[a++]=L[u>>2],o=(u&3)<<4,f=1;break;case 1:s[a++]=L[o|u>>4],o=(u&15)<<2,f=2;break;case 2:s[a++]=L[o|u>>6],s[a++]=L[u&63],f=0;break}a>8191&&((i||(i=[])).push(String.fromCharCode.apply(String,s)),a=0)}return f&&(s[a++]=L[o],s[a++]=61,f===1&&(s[a++]=61)),i?(a&&i.push(String.fromCharCode.apply(String,s.slice(0,a))),i.join("")):String.fromCharCode.apply(String,s.slice(0,a))};var ft="invalid encoding";z.decode=function(t,e,n){for(var i=n,s=0,a,f=0;f<t.length;){var o=t.charCodeAt(f++);if(o===61&&s>1)break;if((o=ht[o])===void 0)throw Error(ft);switch(s){case 0:a=o,s=1;break;case 1:e[n++]=a<<2|(o&48)>>4,a=o,s=2;break;case 2:e[n++]=(a&15)<<4|(o&60)>>2,a=o,s=3;break;case 3:e[n++]=(a&3)<<6|o,s=0;break}}if(s===1)throw Error(ft);return n-i};z.test=function(t){return/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(t)}});var dt=g((be,pt)=>{"use strict";pt.exports=U;function U(){this._listeners={}}U.prototype.on=function(t,e,n){return(this._listeners[t]||(this._listeners[t]=[])).push({fn:e,ctx:n||this}),this};U.prototype.off=function(t,e){if(t===void 0)this._listeners={};else if(e===void 0)this._listeners[t]=[];else for(var n=this._listeners[t],i=0;i<n.length;)n[i].fn===e?n.splice(i,1):++i;return this};U.prototype.emit=function(t){var e=this._listeners[t];if(e){for(var n=[],i=1;i<arguments.length;)n.push(arguments[i++]);for(i=0;i<e.length;)e[i].fn.apply(e[i++].ctx,n)}return this}});var xt=g((ve,Bt)=>{"use strict";Bt.exports=gt(gt);function gt(r){return typeof Float32Array<"u"?function(){var t=new Float32Array([-0]),e=new Uint8Array(t.buffer),n=e[3]===128;function i(o,u,c){t[0]=o,u[c]=e[0],u[c+1]=e[1],u[c+2]=e[2],u[c+3]=e[3]}function s(o,u,c){t[0]=o,u[c]=e[3],u[c+1]=e[2],u[c+2]=e[1],u[c+3]=e[0]}r.writeFloatLE=n?i:s,r.writeFloatBE=n?s:i;function a(o,u){return e[0]=o[u],e[1]=o[u+1],e[2]=o[u+2],e[3]=o[u+3],t[0]}function f(o,u){return e[3]=o[u],e[2]=o[u+1],e[1]=o[u+2],e[0]=o[u+3],t[0]}r.readFloatLE=n?a:f,r.readFloatBE=n?f:a}():function(){function t(n,i,s,a){var f=i<0?1:0;if(f&&(i=-i),i===0)n(1/i>0?0:2147483648,s,a);else if(isNaN(i))n(2143289344,s,a);else if(i>34028234663852886e22)n((f<<31|2139095040)>>>0,s,a);else if(i<11754943508222875e-54)n((f<<31|Math.round(i/1401298464324817e-60))>>>0,s,a);else{var o=Math.floor(Math.log(i)/Math.LN2),u=Math.round(i*Math.pow(2,-o)*8388608)&8388607;n((f<<31|o+127<<23|u)>>>0,s,a)}}r.writeFloatLE=t.bind(null,yt),r.writeFloatBE=t.bind(null,mt);function e(n,i,s){var a=n(i,s),f=(a>>31)*2+1,o=a>>>23&255,u=a&8388607;return o===255?u?NaN:f*(1/0):o===0?f*1401298464324817e-60*u:f*Math.pow(2,o-150)*(u+8388608)}r.readFloatLE=e.bind(null,wt),r.readFloatBE=e.bind(null,_t)}(),typeof Float64Array<"u"?function(){var t=new Float64Array([-0]),e=new Uint8Array(t.buffer),n=e[7]===128;function i(o,u,c){t[0]=o,u[c]=e[0],u[c+1]=e[1],u[c+2]=e[2],u[c+3]=e[3],u[c+4]=e[4],u[c+5]=e[5],u[c+6]=e[6],u[c+7]=e[7]}function s(o,u,c){t[0]=o,u[c]=e[7],u[c+1]=e[6],u[c+2]=e[5],u[c+3]=e[4],u[c+4]=e[3],u[c+5]=e[2],u[c+6]=e[1],u[c+7]=e[0]}r.writeDoubleLE=n?i:s,r.writeDoubleBE=n?s:i;function a(o,u){return e[0]=o[u],e[1]=o[u+1],e[2]=o[u+2],e[3]=o[u+3],e[4]=o[u+4],e[5]=o[u+5],e[6]=o[u+6],e[7]=o[u+7],t[0]}function f(o,u){return e[7]=o[u],e[6]=o[u+1],e[5]=o[u+2],e[4]=o[u+3],e[3]=o[u+4],e[2]=o[u+5],e[1]=o[u+6],e[0]=o[u+7],t[0]}r.readDoubleLE=n?a:f,r.readDoubleBE=n?f:a}():function(){function t(n,i,s,a,f,o){var u=a<0?1:0;if(u&&(a=-a),a===0)n(0,f,o+i),n(1/a>0?0:2147483648,f,o+s);else if(isNaN(a))n(0,f,o+i),n(2146959360,f,o+s);else if(a>17976931348623157e292)n(0,f,o+i),n((u<<31|2146435072)>>>0,f,o+s);else{var c;if(a<22250738585072014e-324)c=a/5e-324,n(c>>>0,f,o+i),n((u<<31|c/4294967296)>>>0,f,o+s);else{var y=Math.floor(Math.log(a)/Math.LN2);y===1024&&(y=1023),c=a*Math.pow(2,-y),n(c*4503599627370496>>>0,f,o+i),n((u<<31|y+1023<<20|c*1048576&1048575)>>>0,f,o+s)}}}r.writeDoubleLE=t.bind(null,yt,0,4),r.writeDoubleBE=t.bind(null,mt,4,0);function e(n,i,s,a,f){var o=n(a,f+i),u=n(a,f+s),c=(u>>31)*2+1,y=u>>>20&2047,A=4294967296*(u&1048575)+o;return y===2047?A?NaN:c*(1/0):y===0?c*5e-324*A:c*Math.pow(2,y-1075)*(A+4503599627370496)}r.readDoubleLE=e.bind(null,wt,0,4),r.readDoubleBE=e.bind(null,_t,4,0)}(),r}function yt(r,t,e){t[e]=r&255,t[e+1]=r>>>8&255,t[e+2]=r>>>16&255,t[e+3]=r>>>24}function mt(r,t,e){t[e]=r>>>24,t[e+1]=r>>>16&255,t[e+2]=r>>>8&255,t[e+3]=r&255}function wt(r,t){return(r[t]|r[t+1]<<8|r[t+2]<<16|r[t+3]<<24)>>>0}function _t(r,t){return(r[t]<<24|r[t+1]<<16|r[t+2]<<8|r[t+3])>>>0}});var bt=g((exports,module)=>{"use strict";module.exports=inquire;function inquire(moduleName){try{var mod=eval("quire".replace(/^/,"re"))(moduleName);if(mod&&(mod.length||Object.keys(mod).length))return mod}catch(r){}return null}});var At=g(vt=>{"use strict";var q=vt;q.length=function(t){for(var e=0,n=0,i=0;i<t.length;++i)n=t.charCodeAt(i),n<128?e+=1:n<2048?e+=2:(n&64512)===55296&&(t.charCodeAt(i+1)&64512)===56320?(++i,e+=4):e+=3;return e};q.read=function(t,e,n){var i=n-e;if(i<1)return"";for(var s=null,a=[],f=0,o;e<n;)o=t[e++],o<128?a[f++]=o:o>191&&o<224?a[f++]=(o&31)<<6|t[e++]&63:o>239&&o<365?(o=((o&7)<<18|(t[e++]&63)<<12|(t[e++]&63)<<6|t[e++]&63)-65536,a[f++]=55296+(o>>10),a[f++]=56320+(o&1023)):a[f++]=(o&15)<<12|(t[e++]&63)<<6|t[e++]&63,f>8191&&((s||(s=[])).push(String.fromCharCode.apply(String,a)),f=0);return s?(f&&s.push(String.fromCharCode.apply(String,a.slice(0,f))),s.join("")):String.fromCharCode.apply(String,a.slice(0,f))};q.write=function(t,e,n){for(var i=n,s,a,f=0;f<t.length;++f)s=t.charCodeAt(f),s<128?e[n++]=s:s<2048?(e[n++]=s>>6|192,e[n++]=s&63|128):(s&64512)===55296&&((a=t.charCodeAt(f+1))&64512)===56320?(s=65536+((s&1023)<<10)+(a&1023),++f,e[n++]=s>>18|240,e[n++]=s>>12&63|128,e[n++]=s>>6&63|128,e[n++]=s&63|128):(e[n++]=s>>12|224,e[n++]=s>>6&63|128,e[n++]=s&63|128);return n-i}});var kt=g((Ee,Et)=>{"use strict";Et.exports=ue;function ue(r,t,e){var n=e||8192,i=n>>>1,s=null,a=n;return function(o){if(o<1||o>i)return r(o);a+o>n&&(s=r(n),a=0);var u=t.call(s,a,a+=o);return a&7&&(a=(a|7)+1),u}}});var Lt=g((ke,St)=>{"use strict";St.exports=d;var C=k();function d(r,t){this.lo=r>>>0,this.hi=t>>>0}var E=d.zero=new d(0,0);E.toNumber=function(){return 0};E.zzEncode=E.zzDecode=function(){return this};E.length=function(){return 1};var ae=d.zeroHash="\0\0\0\0\0\0\0\0";d.fromNumber=function(t){if(t===0)return E;var e=t<0;e&&(t=-t);var n=t>>>0,i=(t-n)/4294967296>>>0;return e&&(i=~i>>>0,n=~n>>>0,++n>4294967295&&(n=0,++i>4294967295&&(i=0))),new d(n,i)};d.from=function(t){if(typeof t=="number")return d.fromNumber(t);if(C.isString(t))if(C.Long)t=C.Long.fromString(t);else return d.fromNumber(parseInt(t,10));return t.low||t.high?new d(t.low>>>0,t.high>>>0):E};d.prototype.toNumber=function(t){if(!t&&this.hi>>>31){var e=~this.lo+1>>>0,n=~this.hi>>>0;return e||(n=n+1>>>0),-(e+n*4294967296)}return this.lo+this.hi*4294967296};d.prototype.toLong=function(t){return C.Long?new C.Long(this.lo|0,this.hi|0,!!t):{low:this.lo|0,high:this.hi|0,unsigned:!!t}};var b=String.prototype.charCodeAt;d.fromHash=function(t){return t===ae?E:new d((b.call(t,0)|b.call(t,1)<<8|b.call(t,2)<<16|b.call(t,3)<<24)>>>0,(b.call(t,4)|b.call(t,5)<<8|b.call(t,6)<<16|b.call(t,7)<<24)>>>0)};d.prototype.toHash=function(){return String.fromCharCode(this.lo&255,this.lo>>>8&255,this.lo>>>16&255,this.lo>>>24,this.hi&255,this.hi>>>8&255,this.hi>>>16&255,this.hi>>>24)};d.prototype.zzEncode=function(){var t=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^t)>>>0,this.lo=(this.lo<<1^t)>>>0,this};d.prototype.zzDecode=function(){var t=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^t)>>>0,this.hi=(this.hi>>>1^t)>>>0,this};d.prototype.length=function(){var t=this.lo,e=(this.lo>>>28|this.hi<<4)>>>0,n=this.hi>>>24;return n===0?e===0?t<16384?t<128?1:2:t<2097152?3:4:e<16384?e<128?5:6:e<2097152?7:8:n<128?9:10}});var k=g(H=>{"use strict";var h=H;h.asPromise=at();h.base64=lt();h.EventEmitter=dt();h.float=xt();h.inquire=bt();h.utf8=At();h.pool=kt();h.LongBits=Lt();h.isNode=!!(typeof globalThis<"u"&&globalThis&&globalThis.process&&globalThis.process.versions&&globalThis.process.versions.node);h.global=h.isNode&&globalThis||typeof window<"u"&&window||typeof self<"u"&&self||H;h.emptyArray=Object.freeze?Object.freeze([]):[];h.emptyObject=Object.freeze?Object.freeze({}):{};h.isInteger=Number.isInteger||function(t){return typeof t=="number"&&isFinite(t)&&Math.floor(t)===t};h.isString=function(t){return typeof t=="string"||t instanceof String};h.isObject=function(t){return t&&typeof t=="object"};h.isset=h.isSet=function(t,e){var n=t[e];return n!=null&&t.hasOwnProperty(e)?typeof n!="object"||(Array.isArray(n)?n.length:Object.keys(n).length)>0:!1};h.Buffer=function(){try{var r=h.inquire("buffer").Buffer;return r.prototype.utf8Write?r:null}catch{return null}}();h._Buffer_from=null;h._Buffer_allocUnsafe=null;h.newBuffer=function(t){return typeof t=="number"?h.Buffer?h._Buffer_allocUnsafe(t):new h.Array(t):h.Buffer?h._Buffer_from(t):typeof Uint8Array>"u"?t:new Uint8Array(t)};h.Array=typeof Uint8Array<"u"?Uint8Array:Array;h.Long=h.global.dcodeIO&&h.global.dcodeIO.Long||h.global.Long||h.inquire("long");h.key2Re=/^true|false|0|1$/;h.key32Re=/^-?(?:0|[1-9][0-9]*)$/;h.key64Re=/^(?:[\\x00-\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;h.longToHash=function(t){return t?h.LongBits.from(t).toHash():h.LongBits.zeroHash};h.longFromHash=function(t,e){var n=h.LongBits.fromHash(t);return h.Long?h.Long.fromBits(n.lo,n.hi,e):n.toNumber(!!e)};function Ft(r,t,e){for(var n=Object.keys(t),i=0;i<n.length;++i)(r[n[i]]===void 0||!e)&&(r[n[i]]=t[n[i]]);return r}h.merge=Ft;h.lcFirst=function(t){return t.charAt(0).toLowerCase()+t.substring(1)};function Dt(r){function t(e,n){if(!(this instanceof t))return new t(e,n);Object.defineProperty(this,"message",{get:function(){return e}}),Error.captureStackTrace?Error.captureStackTrace(this,t):Object.defineProperty(this,"stack",{value:new Error().stack||""}),n&&Ft(this,n)}return t.prototype=Object.create(Error.prototype,{constructor:{value:t,writable:!0,enumerable:!1,configurable:!0},name:{get:function(){return r},set:void 0,enumerable:!1,configurable:!0},toString:{value:function(){return this.name+": "+this.message},writable:!0,enumerable:!1,configurable:!0}}),t}h.newError=Dt;h.ProtocolError=Dt("ProtocolError");h.oneOfGetter=function(t){for(var e={},n=0;n<t.length;++n)e[t[n]]=1;return function(){for(var i=Object.keys(this),s=i.length-1;s>-1;--s)if(e[i[s]]===1&&this[i[s]]!==void 0&&this[i[s]]!==null)return i[s]}};h.oneOfSetter=function(t){return function(e){for(var n=0;n<t.length;++n)t[n]!==e&&delete this[t[n]]}};h.toJSONOptions={longs:String,enums:String,bytes:String,json:!0};h._configure=function(){var r=h.Buffer;if(!r){h._Buffer_from=h._Buffer_allocUnsafe=null;return}h._Buffer_from=r.from!==Uint8Array.from&&r.from||function(e,n){return new r(e,n)},h._Buffer_allocUnsafe=r.allocUnsafe||function(e){return new r(e)}}});var V=g((Le,Rt)=>{"use strict";Rt.exports=p;var B=k(),W,Mt=B.LongBits,fe=B.utf8;function _(r,t){return RangeError("index out of range: "+r.pos+" + "+(t||1)+" > "+r.len)}function p(r){this.buf=r,this.pos=0,this.len=r.length}var Ct=typeof Uint8Array<"u"?function(t){if(t instanceof Uint8Array||Array.isArray(t))return new p(t);throw Error("illegal buffer")}:function(t){if(Array.isArray(t))return new p(t);throw Error("illegal buffer")},Nt=function(){return B.Buffer?function(e){return(p.create=function(i){return B.Buffer.isBuffer(i)?new W(i):Ct(i)})(e)}:Ct};p.create=Nt();p.prototype._slice=B.Array.prototype.subarray||B.Array.prototype.slice;p.prototype.uint32=function(){var t=4294967295;return function(){if(t=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(t=(t|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(t=(t|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(t=(t|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(t=(t|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return t;if((this.pos+=5)>this.len)throw this.pos=this.len,_(this,10);return t}}();p.prototype.int32=function(){return this.uint32()|0};p.prototype.sint32=function(){var t=this.uint32();return t>>>1^-(t&1)|0};function $(){var r=new Mt(0,0),t=0;if(this.len-this.pos>4){for(;t<4;++t)if(r.lo=(r.lo|(this.buf[this.pos]&127)<<t*7)>>>0,this.buf[this.pos++]<128)return r;if(r.lo=(r.lo|(this.buf[this.pos]&127)<<28)>>>0,r.hi=(r.hi|(this.buf[this.pos]&127)>>4)>>>0,this.buf[this.pos++]<128)return r;t=0}else{for(;t<3;++t){if(this.pos>=this.len)throw _(this);if(r.lo=(r.lo|(this.buf[this.pos]&127)<<t*7)>>>0,this.buf[this.pos++]<128)return r}return r.lo=(r.lo|(this.buf[this.pos++]&127)<<t*7)>>>0,r}if(this.len-this.pos>4){for(;t<5;++t)if(r.hi=(r.hi|(this.buf[this.pos]&127)<<t*7+3)>>>0,this.buf[this.pos++]<128)return r}else for(;t<5;++t){if(this.pos>=this.len)throw _(this);if(r.hi=(r.hi|(this.buf[this.pos]&127)<<t*7+3)>>>0,this.buf[this.pos++]<128)return r}throw Error("invalid varint encoding")}p.prototype.bool=function(){return this.uint32()!==0};function O(r,t){return(r[t-4]|r[t-3]<<8|r[t-2]<<16|r[t-1]<<24)>>>0}p.prototype.fixed32=function(){if(this.pos+4>this.len)throw _(this,4);return O(this.buf,this.pos+=4)};p.prototype.sfixed32=function(){if(this.pos+4>this.len)throw _(this,4);return O(this.buf,this.pos+=4)|0};function It(){if(this.pos+8>this.len)throw _(this,8);return new Mt(O(this.buf,this.pos+=4),O(this.buf,this.pos+=4))}p.prototype.float=function(){if(this.pos+4>this.len)throw _(this,4);var t=B.float.readFloatLE(this.buf,this.pos);return this.pos+=4,t};p.prototype.double=function(){if(this.pos+8>this.len)throw _(this,4);var t=B.float.readDoubleLE(this.buf,this.pos);return this.pos+=8,t};p.prototype.bytes=function(){var t=this.uint32(),e=this.pos,n=this.pos+t;if(n>this.len)throw _(this,t);return this.pos+=t,Array.isArray(this.buf)?this.buf.slice(e,n):e===n?new this.buf.constructor(0):this._slice.call(this.buf,e,n)};p.prototype.string=function(){var t=this.bytes();return fe.read(t,0,t.length)};p.prototype.skip=function(t){if(typeof t=="number"){if(this.pos+t>this.len)throw _(this,t);this.pos+=t}else do if(this.pos>=this.len)throw _(this);while(this.buf[this.pos++]&128);return this};p.prototype.skipType=function(r){switch(r){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(r=this.uint32()&7)!==4;)this.skipType(r);break;case 5:this.skip(4);break;default:throw Error("invalid wire type "+r+" at offset "+this.pos)}return this};p._configure=function(r){W=r,p.create=Nt(),W._configure();var t=B.Long?"toLong":"toNumber";B.merge(p.prototype,{int64:function(){return $.call(this)[t](!1)},uint64:function(){return $.call(this)[t](!0)},sint64:function(){return $.call(this).zzDecode()[t](!1)},fixed64:function(){return It.call(this)[t](!0)},sfixed64:function(){return It.call(this)[t](!1)}})}});var Tt=g((Fe,Ot)=>{"use strict";Ot.exports=S;var Ut=V();(S.prototype=Object.create(Ut.prototype)).constructor=S;var zt=k();function S(r){Ut.call(this,r)}S._configure=function(){zt.Buffer&&(S.prototype._slice=zt.Buffer.prototype.slice)};S.prototype.string=function(){var t=this.uint32();return this.buf.utf8Slice?this.buf.utf8Slice(this.pos,this.pos=Math.min(this.pos+t,this.len)):this.buf.toString("utf-8",this.pos,this.pos=Math.min(this.pos+t,this.len))};S._configure()});var K=g((De,Wt)=>{"use strict";Wt.exports=l;var m=k(),G,T=m.LongBits,qt=m.base64,Ht=m.utf8;function I(r,t,e){this.fn=r,this.len=t,this.next=void 0,this.val=e}function Z(){}function he(r){this.head=r.head,this.tail=r.tail,this.len=r.len,this.next=r.states}function l(){this.len=0,this.head=new I(Z,0,0),this.tail=this.head,this.states=null}var $t=function(){return m.Buffer?function(){return(l.create=function(){return new G})()}:function(){return new l}};l.create=$t();l.alloc=function(t){return new m.Array(t)};m.Array!==Array&&(l.alloc=m.pool(l.alloc,m.Array.prototype.subarray));l.prototype._push=function(t,e,n){return this.tail=this.tail.next=new I(t,e,n),this.len+=e,this};function P(r,t,e){t[e]=r&255}function ce(r,t,e){for(;r>127;)t[e++]=r&127|128,r>>>=7;t[e]=r}function J(r,t){this.len=r,this.next=void 0,this.val=t}J.prototype=Object.create(I.prototype);J.prototype.fn=ce;l.prototype.uint32=function(t){return this.len+=(this.tail=this.tail.next=new J((t=t>>>0)<128?1:t<16384?2:t<2097152?3:t<268435456?4:5,t)).len,this};l.prototype.int32=function(t){return t<0?this._push(X,10,T.fromNumber(t)):this.uint32(t)};l.prototype.sint32=function(t){return this.uint32((t<<1^t>>31)>>>0)};function X(r,t,e){for(;r.hi;)t[e++]=r.lo&127|128,r.lo=(r.lo>>>7|r.hi<<25)>>>0,r.hi>>>=7;for(;r.lo>127;)t[e++]=r.lo&127|128,r.lo=r.lo>>>7;t[e++]=r.lo}l.prototype.uint64=function(t){var e=T.from(t);return this._push(X,e.length(),e)};l.prototype.int64=l.prototype.uint64;l.prototype.sint64=function(t){var e=T.from(t).zzEncode();return this._push(X,e.length(),e)};l.prototype.bool=function(t){return this._push(P,1,t?1:0)};function j(r,t,e){t[e]=r&255,t[e+1]=r>>>8&255,t[e+2]=r>>>16&255,t[e+3]=r>>>24}l.prototype.fixed32=function(t){return this._push(j,4,t>>>0)};l.prototype.sfixed32=l.prototype.fixed32;l.prototype.fixed64=function(t){var e=T.from(t);return this._push(j,4,e.lo)._push(j,4,e.hi)};l.prototype.sfixed64=l.prototype.fixed64;l.prototype.float=function(t){return this._push(m.float.writeFloatLE,4,t)};l.prototype.double=function(t){return this._push(m.float.writeDoubleLE,8,t)};var le=m.Array.prototype.set?function(t,e,n){e.set(t,n)}:function(t,e,n){for(var i=0;i<t.length;++i)e[n+i]=t[i]};l.prototype.bytes=function(t){var e=t.length>>>0;if(!e)return this._push(P,1,0);if(m.isString(t)){var n=l.alloc(e=qt.length(t));qt.decode(t,n,0),t=n}return this.uint32(e)._push(le,e,t)};l.prototype.string=function(t){var e=Ht.length(t);return e?this.uint32(e)._push(Ht.write,e,t):this._push(P,1,0)};l.prototype.fork=function(){return this.states=new he(this),this.head=this.tail=new I(Z,0,0),this.len=0,this};l.prototype.reset=function(){return this.states?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new I(Z,0,0),this.len=0),this};l.prototype.ldelim=function(){var t=this.head,e=this.tail,n=this.len;return this.reset().uint32(n),n&&(this.tail.next=t.next,this.tail=e,this.len+=n),this};l.prototype.finish=function(){for(var t=this.head.next,e=this.constructor.alloc(this.len),n=0;t;)t.fn(t.val,e,n),n+=t.len,t=t.next;return e};l._configure=function(r){G=r,l.create=$t(),G._configure()}});var jt=g((Ce,Gt)=>{"use strict";Gt.exports=x;var Vt=K();(x.prototype=Object.create(Vt.prototype)).constructor=x;var v=k();function x(){Vt.call(this)}x._configure=function(){x.alloc=v._Buffer_allocUnsafe,x.writeBytesBuffer=v.Buffer&&v.Buffer.prototype instanceof Uint8Array&&v.Buffer.prototype.set.name==="set"?function(t,e,n){e.set(t,n)}:function(t,e,n){if(t.copy)t.copy(e,n,0,t.length);else for(var i=0;i<t.length;)e[n++]=t[i++]}};x.prototype.bytes=function(t){v.isString(t)&&(t=v._Buffer_from(t,"base64"));var e=t.length>>>0;return this.uint32(e),e&&this._push(x.writeBytesBuffer,e,t),this};function pe(r,t,e){r.length<40?v.utf8.write(r,t,e):t.utf8Write?t.utf8Write(r,e):t.write(r,e)}x.prototype.string=function(t){var e=v.Buffer.byteLength(t);return this.uint32(e),e&&this._push(pe,e,t),this};x._configure()});var we={};ie(we,{Libp2pRecord:()=>F});var Q=D(V(),1),Zt=D(Tt(),1),Pt=D(k(),1),Y=D(K(),1),Jt=D(jt(),1);function de(){Pt.default._configure(),Q.default._configure(Zt.default),Y.default._configure(Jt.default)}de();var Xt=["uint64","int64","sint64","fixed64","sfixed64"];function ge(r){for(let t of Xt){if(r[t]==null)continue;let e=r[t];r[t]=function(){return BigInt(e.call(this).toString())}}return r}function tt(r){return ge(new Q.default(r))}function ye(r){for(let t of Xt){if(r[t]==null)continue;let e=r[t];r[t]=function(n){return e.call(this,n.toString())}}return r}function et(){return ye(Y.default.create())}function rt(r,t){let e=tt(r instanceof Uint8Array?r:r.subarray());return t.decode(e)}function nt(r,t){let e=et();return t.encode(r,e,{lengthDelimited:!1}),e.finish()}var M;(function(r){r[r.VARINT=0]="VARINT",r[r.BIT64=1]="BIT64",r[r.LENGTH_DELIMITED=2]="LENGTH_DELIMITED",r[r.START_GROUP=3]="START_GROUP",r[r.END_GROUP=4]="END_GROUP",r[r.BIT32=5]="BIT32"})(M||(M={}));function it(r,t,e,n){return{name:r,type:t,encode:e,decode:n}}function ot(r,t){return it("message",M.LENGTH_DELIMITED,r,t)}var N;(function(r){let t;r.codec=()=>(t==null&&(t=ot((e,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),e.key!=null&&e.key.byteLength>0&&(n.uint32(10),n.bytes(e.key)),e.value!=null&&e.value.byteLength>0&&(n.uint32(18),n.bytes(e.value)),e.timeReceived!=null&&e.timeReceived!==""&&(n.uint32(42),n.string(e.timeReceived)),i.lengthDelimited!==!1&&n.ldelim()},(e,n)=>{let i={key:new Uint8Array(0),value:new Uint8Array(0),timeReceived:""},s=n==null?e.len:e.pos+n;for(;e.pos<s;){let a=e.uint32();switch(a>>>3){case 1:i.key=e.bytes();break;case 2:i.value=e.bytes();break;case 5:i.timeReceived=e.string();break;default:e.skipType(a&7);break}}return i})),t),r.encode=e=>nt(e,r.codec()),r.decode=e=>rt(e,r.codec())})(N||(N={}));function Kt(r){let t=r.getUTCFullYear(),e=String(r.getUTCMonth()+1).padStart(2,"0"),n=String(r.getUTCDate()).padStart(2,"0"),i=String(r.getUTCHours()).padStart(2,"0"),s=String(r.getUTCMinutes()).padStart(2,"0"),a=String(r.getUTCSeconds()).padStart(2,"0"),f=r.getUTCMilliseconds(),o=String(f*1e3*1e3).padStart(9,"0");return`${t}-${e}-${n}T${i}:${s}:${a}.${o}Z`}function Qt(r){let t=new RegExp("(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})\\.(\\d+)Z"),e=String(r).trim().match(t);if(e==null)throw new Error("Invalid format");let n=parseInt(e[1],10),i=parseInt(e[2],10)-1,s=parseInt(e[3],10),a=parseInt(e[4],10),f=parseInt(e[5],10),o=parseInt(e[6],10),u=parseInt(e[7].slice(0,-6),10);return new Date(Date.UTC(n,i,s,a,f,o,u))}var F=class{constructor(t,e,n){if(!(t instanceof Uint8Array))throw new Error("key must be a Uint8Array");if(!(e instanceof Uint8Array))throw new Error("value must be a Uint8Array");this.key=t,this.value=e,this.timeReceived=n}serialize(){return N.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:Kt(this.timeReceived)}}static deserialize(t){let e=N.decode(t);return new F(e.key,e.value,new Date(e.timeReceived))}static fromDeserialized(t){let e=Qt(t.timeReceived);if(t.key==null)throw new Error("key missing from deserialized object");if(t.value==null)throw new Error("value missing from deserialized object");return new F(t.key,t.value,e)}};return oe(we);})();
2
+ "use strict";var Libp2PRecord=(()=>{var it=Object.defineProperty;var Be=Object.getOwnPropertyDescriptor;var Me=Object.getOwnPropertyNames;var Te=Object.prototype.hasOwnProperty;var l=(r,t)=>{for(var e in t)it(r,e,{get:t[e],enumerable:!0})},ze=(r,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Me(t))!Te.call(r,i)&&i!==e&&it(r,i,{get:()=>t[i],enumerable:!(n=Be(t,i))||n.enumerable});return r};var ke=r=>ze(it({},"__esModule",{value:!0}),r);var en={};l(en,{Libp2pRecord:()=>Pt});function ot(r=0){return new Uint8Array(r)}function D(r=0){return new Uint8Array(r)}var Le=Math.pow(2,7),Re=Math.pow(2,14),ve=Math.pow(2,21),qt=Math.pow(2,28),Xt=Math.pow(2,35),Jt=Math.pow(2,42),Wt=Math.pow(2,49),f=128,B=127;function P(r){if(r<Le)return 1;if(r<Re)return 2;if(r<ve)return 3;if(r<qt)return 4;if(r<Xt)return 5;if(r<Jt)return 6;if(r<Wt)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function Ht(r,t,e=0){switch(P(r)){case 8:t[e++]=r&255|f,r/=128;case 7:t[e++]=r&255|f,r/=128;case 6:t[e++]=r&255|f,r/=128;case 5:t[e++]=r&255|f,r/=128;case 4:t[e++]=r&255|f,r>>>=7;case 3:t[e++]=r&255|f,r>>>=7;case 2:t[e++]=r&255|f,r>>>=7;case 1:{t[e++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return t}function Qt(r,t){let e=r[t],n=0;if(n+=e&B,e<f||(e=r[t+1],n+=(e&B)<<7,e<f)||(e=r[t+2],n+=(e&B)<<14,e<f)||(e=r[t+3],n+=(e&B)<<21,e<f)||(e=r[t+4],n+=(e&B)*qt,e<f)||(e=r[t+5],n+=(e&B)*Xt,e<f)||(e=r[t+6],n+=(e&B)*Jt,e<f)||(e=r[t+7],n+=(e&B)*Wt,e<f))return n;throw new RangeError("Could not decode varint")}var st=new Float32Array([-0]),M=new Uint8Array(st.buffer);function Zt(r,t,e){st[0]=r,t[e]=M[0],t[e+1]=M[1],t[e+2]=M[2],t[e+3]=M[3]}function jt(r,t){return M[0]=r[t],M[1]=r[t+1],M[2]=r[t+2],M[3]=r[t+3],st[0]}var ct=new Float64Array([-0]),u=new Uint8Array(ct.buffer);function Kt(r,t,e){ct[0]=r,t[e]=u[0],t[e+1]=u[1],t[e+2]=u[2],t[e+3]=u[3],t[e+4]=u[4],t[e+5]=u[5],t[e+6]=u[6],t[e+7]=u[7]}function Yt(r,t){return u[0]=r[t],u[1]=r[t+1],u[2]=r[t+2],u[3]=r[t+3],u[4]=r[t+4],u[5]=r[t+5],u[6]=r[t+6],u[7]=r[t+7],ct[0]}var Ve=BigInt(Number.MAX_SAFE_INTEGER),$e=BigInt(Number.MIN_SAFE_INTEGER),m=class r{lo;hi;constructor(t,e){this.lo=t|0,this.hi=e|0}toNumber(t=!1){if(!t&&this.hi>>>31>0){let e=~this.lo+1>>>0,n=~this.hi>>>0;return e===0&&(n=n+1>>>0),-(e+n*4294967296)}return this.lo+this.hi*4294967296}toBigInt(t=!1){if(t)return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n);if(this.hi>>>31){let e=~this.lo+1>>>0,n=~this.hi>>>0;return e===0&&(n=n+1>>>0),-(BigInt(e)+(BigInt(n)<<32n))}return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n)}toString(t=!1){return this.toBigInt(t).toString()}zzEncode(){let t=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^t)>>>0,this.lo=(this.lo<<1^t)>>>0,this}zzDecode(){let t=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^t)>>>0,this.hi=(this.hi>>>1^t)>>>0,this}length(){let t=this.lo,e=(this.lo>>>28|this.hi<<4)>>>0,n=this.hi>>>24;return n===0?e===0?t<16384?t<128?1:2:t<2097152?3:4:e<16384?e<128?5:6:e<2097152?7:8:n<128?9:10}static fromBigInt(t){if(t===0n)return k;if(t<Ve&&t>$e)return this.fromNumber(Number(t));let e=t<0n;e&&(t=-t);let n=t>>32n,i=t-(n<<32n);return e&&(n=~n|0n,i=~i|0n,++i>te&&(i=0n,++n>te&&(n=0n))),new r(Number(i),Number(n))}static fromNumber(t){if(t===0)return k;let e=t<0;e&&(t=-t);let n=t>>>0,i=(t-n)/4294967296>>>0;return e&&(i=~i>>>0,n=~n>>>0,++n>4294967295&&(n=0,++i>4294967295&&(i=0))),new r(n,i)}static from(t){return typeof t=="number"?r.fromNumber(t):typeof t=="bigint"?r.fromBigInt(t):typeof t=="string"?r.fromBigInt(BigInt(t)):t.low!=null||t.high!=null?new r(t.low>>>0,t.high>>>0):k}},k=new m(0,0);k.toBigInt=function(){return 0n};k.zzEncode=k.zzDecode=function(){return this};k.length=function(){return 1};var te=4294967296n;function ee(r){let t=0,e=0;for(let n=0;n<r.length;++n)e=r.charCodeAt(n),e<128?t+=1:e<2048?t+=2:(e&64512)===55296&&(r.charCodeAt(n+1)&64512)===56320?(++n,t+=4):t+=3;return t}function re(r,t,e){if(e-t<1)return"";let i,o=[],s=0,c;for(;t<e;)c=r[t++],c<128?o[s++]=c:c>191&&c<224?o[s++]=(c&31)<<6|r[t++]&63:c>239&&c<365?(c=((c&7)<<18|(r[t++]&63)<<12|(r[t++]&63)<<6|r[t++]&63)-65536,o[s++]=55296+(c>>10),o[s++]=56320+(c&1023)):o[s++]=(c&15)<<12|(r[t++]&63)<<6|r[t++]&63,s>8191&&((i??(i=[])).push(String.fromCharCode.apply(String,o)),s=0);return i!=null?(s>0&&i.push(String.fromCharCode.apply(String,o.slice(0,s))),i.join("")):String.fromCharCode.apply(String,o.slice(0,s))}function at(r,t,e){let n=e,i,o;for(let s=0;s<r.length;++s)i=r.charCodeAt(s),i<128?t[e++]=i:i<2048?(t[e++]=i>>6|192,t[e++]=i&63|128):(i&64512)===55296&&((o=r.charCodeAt(s+1))&64512)===56320?(i=65536+((i&1023)<<10)+(o&1023),++s,t[e++]=i>>18|240,t[e++]=i>>12&63|128,t[e++]=i>>6&63|128,t[e++]=i&63|128):(t[e++]=i>>12|224,t[e++]=i>>6&63|128,t[e++]=i&63|128);return e-n}function y(r,t){return RangeError(`index out of range: ${r.pos} + ${t??1} > ${r.len}`)}function tt(r,t){return(r[t-4]|r[t-3]<<8|r[t-2]<<16|r[t-1]<<24)>>>0}var ht=class{buf;pos;len;_slice=Uint8Array.prototype.subarray;constructor(t){this.buf=t,this.pos=0,this.len=t.length}uint32(){let t=4294967295;if(t=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(t=(t|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(t=(t|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(t=(t|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(t=(t|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return t;if((this.pos+=5)>this.len)throw this.pos=this.len,y(this,10);return t}int32(){return this.uint32()|0}sint32(){let t=this.uint32();return t>>>1^-(t&1)|0}bool(){return this.uint32()!==0}fixed32(){if(this.pos+4>this.len)throw y(this,4);return tt(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw y(this,4);return tt(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw y(this,4);let t=jt(this.buf,this.pos);return this.pos+=4,t}double(){if(this.pos+8>this.len)throw y(this,4);let t=Yt(this.buf,this.pos);return this.pos+=8,t}bytes(){let t=this.uint32(),e=this.pos,n=this.pos+t;if(n>this.len)throw y(this,t);return this.pos+=t,e===n?new Uint8Array(0):this.buf.subarray(e,n)}string(){let t=this.bytes();return re(t,0,t.length)}skip(t){if(typeof t=="number"){if(this.pos+t>this.len)throw y(this,t);this.pos+=t}else do if(this.pos>=this.len)throw y(this);while(this.buf[this.pos++]&128);return this}skipType(t){switch(t){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(t=this.uint32()&7)!==4;)this.skipType(t);break;case 5:this.skip(4);break;default:throw Error(`invalid wire type ${t} at offset ${this.pos}`)}return this}readLongVarint(){let t=new m(0,0),e=0;if(this.len-this.pos>4){for(;e<4;++e)if(t.lo=(t.lo|(this.buf[this.pos]&127)<<e*7)>>>0,this.buf[this.pos++]<128)return t;if(t.lo=(t.lo|(this.buf[this.pos]&127)<<28)>>>0,t.hi=(t.hi|(this.buf[this.pos]&127)>>4)>>>0,this.buf[this.pos++]<128)return t;e=0}else{for(;e<3;++e){if(this.pos>=this.len)throw y(this);if(t.lo=(t.lo|(this.buf[this.pos]&127)<<e*7)>>>0,this.buf[this.pos++]<128)return t}return t.lo=(t.lo|(this.buf[this.pos++]&127)<<e*7)>>>0,t}if(this.len-this.pos>4){for(;e<5;++e)if(t.hi=(t.hi|(this.buf[this.pos]&127)<<e*7+3)>>>0,this.buf[this.pos++]<128)return t}else for(;e<5;++e){if(this.pos>=this.len)throw y(this);if(t.hi=(t.hi|(this.buf[this.pos]&127)<<e*7+3)>>>0,this.buf[this.pos++]<128)return t}throw Error("invalid varint encoding")}readFixed64(){if(this.pos+8>this.len)throw y(this,8);let t=tt(this.buf,this.pos+=4),e=tt(this.buf,this.pos+=4);return new m(t,e)}int64(){return this.readLongVarint().toBigInt()}int64Number(){return this.readLongVarint().toNumber()}int64String(){return this.readLongVarint().toString()}uint64(){return this.readLongVarint().toBigInt(!0)}uint64Number(){let t=Qt(this.buf,this.pos);return this.pos+=P(t),t}uint64String(){return this.readLongVarint().toString(!0)}sint64(){return this.readLongVarint().zzDecode().toBigInt()}sint64Number(){return this.readLongVarint().zzDecode().toNumber()}sint64String(){return this.readLongVarint().zzDecode().toString()}fixed64(){return this.readFixed64().toBigInt()}fixed64Number(){return this.readFixed64().toNumber()}fixed64String(){return this.readFixed64().toString()}sfixed64(){return this.readFixed64().toBigInt()}sfixed64Number(){return this.readFixed64().toNumber()}sfixed64String(){return this.readFixed64().toString()}};function dt(r){return new ht(r instanceof Uint8Array?r:r.subarray())}function ut(r,t,e){let n=dt(r);return t.decode(n,void 0,e)}var xt={};l(xt,{base10:()=>Xe});var mn=new Uint8Array(0);function ie(r,t){if(r===t)return!0;if(r.byteLength!==t.byteLength)return!1;for(let e=0;e<r.byteLength;e++)if(r[e]!==t[e])return!1;return!0}function N(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")}function oe(r){return new TextEncoder().encode(r)}function se(r){return new TextDecoder().decode(r)}function Oe(r,t){if(r.length>=255)throw new TypeError("Alphabet too long");for(var e=new Uint8Array(256),n=0;n<e.length;n++)e[n]=255;for(var i=0;i<r.length;i++){var o=r.charAt(i),s=o.charCodeAt(0);if(e[s]!==255)throw new TypeError(o+" is ambiguous");e[s]=i}var c=r.length,d=r.charAt(0),C=Math.log(c)/Math.log(256),x=Math.log(256)/Math.log(c);function v(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 p=0,z=0,w=0,E=a.length;w!==E&&a[w]===0;)w++,p++;for(var S=(E-w)*x+1>>>0,g=new Uint8Array(S);w!==E;){for(var A=a[w],U=0,b=S-1;(A!==0||U<z)&&b!==-1;b--,U++)A+=256*g[b]>>>0,g[b]=A%c>>>0,A=A/c>>>0;if(A!==0)throw new Error("Non-zero carry");z=U,w++}for(var F=S-z;F!==S&&g[F]===0;)F++;for(var Y=d.repeat(p);F<S;++F)Y+=r.charAt(g[F]);return Y}function K(a){if(typeof a!="string")throw new TypeError("Expected String");if(a.length===0)return new Uint8Array;var p=0;if(a[p]!==" "){for(var z=0,w=0;a[p]===d;)z++,p++;for(var E=(a.length-p)*C+1>>>0,S=new Uint8Array(E);a[p];){var g=e[a.charCodeAt(p)];if(g===255)return;for(var A=0,U=E-1;(g!==0||A<w)&&U!==-1;U--,A++)g+=c*S[U]>>>0,S[U]=g%256>>>0,g=g/256>>>0;if(g!==0)throw new Error("Non-zero carry");w=A,p++}if(a[p]!==" "){for(var b=E-w;b!==E&&S[b]===0;)b++;for(var F=new Uint8Array(z+(E-b)),Y=z;b!==E;)F[Y++]=S[b++];return F}}}function De(a){var p=K(a);if(p)return p;throw new Error(`Non-${t} character`)}return{encode:v,decodeUnsafe:K,decode:De}}var _e=Oe,Ge=_e,ae=Ge;var ft=class{name;prefix;baseEncode;constructor(t,e,n){this.name=t,this.prefix=e,this.baseEncode=n}encode(t){if(t instanceof Uint8Array)return`${this.prefix}${this.baseEncode(t)}`;throw Error("Unknown type, must be binary type")}},pt=class{name;prefix;baseDecode;prefixCodePoint;constructor(t,e,n){if(this.name=t,this.prefix=e,e.codePointAt(0)===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=e.codePointAt(0),this.baseDecode=n}decode(t){if(typeof t=="string"){if(t.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(t)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(t.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(t){return he(this,t)}},lt=class{decoders;constructor(t){this.decoders=t}or(t){return he(this,t)}decode(t){let e=t[0],n=this.decoders[e];if(n!=null)return n.decode(t);throw RangeError(`Unable to decode multibase string ${JSON.stringify(t)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}};function he(r,t){return new lt({...r.decoders??{[r.prefix]:r},...t.decoders??{[t.prefix]:t}})}var mt=class{name;prefix;baseEncode;baseDecode;encoder;decoder;constructor(t,e,n,i){this.name=t,this.prefix=e,this.baseEncode=n,this.baseDecode=i,this.encoder=new ft(t,e,n),this.decoder=new pt(t,e,i)}encode(t){return this.encoder.encode(t)}decode(t){return this.decoder.decode(t)}};function V({name:r,prefix:t,encode:e,decode:n}){return new mt(r,t,e,n)}function T({name:r,prefix:t,alphabet:e}){let{encode:n,decode:i}=ae(e,r);return V({prefix:t,name:r,encode:n,decode:o=>N(i(o))})}function Pe(r,t,e,n){let i={};for(let x=0;x<t.length;++x)i[t[x]]=x;let o=r.length;for(;r[o-1]==="=";)--o;let s=new Uint8Array(o*e/8|0),c=0,d=0,C=0;for(let x=0;x<o;++x){let v=i[r[x]];if(v===void 0)throw new SyntaxError(`Non-${n} character`);d=d<<e|v,c+=e,c>=8&&(c-=8,s[C++]=255&d>>c)}if(c>=e||255&d<<8-c)throw new SyntaxError("Unexpected end of data");return s}function qe(r,t,e){let n=t[t.length-1]==="=",i=(1<<e)-1,o="",s=0,c=0;for(let d=0;d<r.length;++d)for(c=c<<8|r[d],s+=8;s>e;)s-=e,o+=t[i&c>>s];if(s!==0&&(o+=t[i&c<<e-s]),n)for(;o.length*e&7;)o+="=";return o}function h({name:r,prefix:t,bitsPerChar:e,alphabet:n}){return V({prefix:t,name:r,encode(i){return qe(i,n,e)},decode(i){return Pe(i,n,e,r)}})}var Xe=T({prefix:"9",name:"base10",alphabet:"0123456789"});var gt={};l(gt,{base16:()=>Je,base16upper:()=>We});var Je=h({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),We=h({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var wt={};l(wt,{base2:()=>He});var He=h({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var bt={};l(bt,{base256emoji:()=>Ye});var de=Array.from("\u{1F680}\u{1FA90}\u2604\u{1F6F0}\u{1F30C}\u{1F311}\u{1F312}\u{1F313}\u{1F314}\u{1F315}\u{1F316}\u{1F317}\u{1F318}\u{1F30D}\u{1F30F}\u{1F30E}\u{1F409}\u2600\u{1F4BB}\u{1F5A5}\u{1F4BE}\u{1F4BF}\u{1F602}\u2764\u{1F60D}\u{1F923}\u{1F60A}\u{1F64F}\u{1F495}\u{1F62D}\u{1F618}\u{1F44D}\u{1F605}\u{1F44F}\u{1F601}\u{1F525}\u{1F970}\u{1F494}\u{1F496}\u{1F499}\u{1F622}\u{1F914}\u{1F606}\u{1F644}\u{1F4AA}\u{1F609}\u263A\u{1F44C}\u{1F917}\u{1F49C}\u{1F614}\u{1F60E}\u{1F607}\u{1F339}\u{1F926}\u{1F389}\u{1F49E}\u270C\u2728\u{1F937}\u{1F631}\u{1F60C}\u{1F338}\u{1F64C}\u{1F60B}\u{1F497}\u{1F49A}\u{1F60F}\u{1F49B}\u{1F642}\u{1F493}\u{1F929}\u{1F604}\u{1F600}\u{1F5A4}\u{1F603}\u{1F4AF}\u{1F648}\u{1F447}\u{1F3B6}\u{1F612}\u{1F92D}\u2763\u{1F61C}\u{1F48B}\u{1F440}\u{1F62A}\u{1F611}\u{1F4A5}\u{1F64B}\u{1F61E}\u{1F629}\u{1F621}\u{1F92A}\u{1F44A}\u{1F973}\u{1F625}\u{1F924}\u{1F449}\u{1F483}\u{1F633}\u270B\u{1F61A}\u{1F61D}\u{1F634}\u{1F31F}\u{1F62C}\u{1F643}\u{1F340}\u{1F337}\u{1F63B}\u{1F613}\u2B50\u2705\u{1F97A}\u{1F308}\u{1F608}\u{1F918}\u{1F4A6}\u2714\u{1F623}\u{1F3C3}\u{1F490}\u2639\u{1F38A}\u{1F498}\u{1F620}\u261D\u{1F615}\u{1F33A}\u{1F382}\u{1F33B}\u{1F610}\u{1F595}\u{1F49D}\u{1F64A}\u{1F639}\u{1F5E3}\u{1F4AB}\u{1F480}\u{1F451}\u{1F3B5}\u{1F91E}\u{1F61B}\u{1F534}\u{1F624}\u{1F33C}\u{1F62B}\u26BD\u{1F919}\u2615\u{1F3C6}\u{1F92B}\u{1F448}\u{1F62E}\u{1F646}\u{1F37B}\u{1F343}\u{1F436}\u{1F481}\u{1F632}\u{1F33F}\u{1F9E1}\u{1F381}\u26A1\u{1F31E}\u{1F388}\u274C\u270A\u{1F44B}\u{1F630}\u{1F928}\u{1F636}\u{1F91D}\u{1F6B6}\u{1F4B0}\u{1F353}\u{1F4A2}\u{1F91F}\u{1F641}\u{1F6A8}\u{1F4A8}\u{1F92C}\u2708\u{1F380}\u{1F37A}\u{1F913}\u{1F619}\u{1F49F}\u{1F331}\u{1F616}\u{1F476}\u{1F974}\u25B6\u27A1\u2753\u{1F48E}\u{1F4B8}\u2B07\u{1F628}\u{1F31A}\u{1F98B}\u{1F637}\u{1F57A}\u26A0\u{1F645}\u{1F61F}\u{1F635}\u{1F44E}\u{1F932}\u{1F920}\u{1F927}\u{1F4CC}\u{1F535}\u{1F485}\u{1F9D0}\u{1F43E}\u{1F352}\u{1F617}\u{1F911}\u{1F30A}\u{1F92F}\u{1F437}\u260E\u{1F4A7}\u{1F62F}\u{1F486}\u{1F446}\u{1F3A4}\u{1F647}\u{1F351}\u2744\u{1F334}\u{1F4A3}\u{1F438}\u{1F48C}\u{1F4CD}\u{1F940}\u{1F922}\u{1F445}\u{1F4A1}\u{1F4A9}\u{1F450}\u{1F4F8}\u{1F47B}\u{1F910}\u{1F92E}\u{1F3BC}\u{1F975}\u{1F6A9}\u{1F34E}\u{1F34A}\u{1F47C}\u{1F48D}\u{1F4E3}\u{1F942}"),Qe=de.reduce((r,t,e)=>(r[e]=t,r),[]),Ze=de.reduce((r,t,e)=>(r[t.codePointAt(0)]=e,r),[]);function je(r){return r.reduce((t,e)=>(t+=Qe[e],t),"")}function Ke(r){let t=[];for(let e of r){let n=Ze[e.codePointAt(0)];if(n===void 0)throw new Error(`Non-base256emoji character: ${e}`);t.push(n)}return new Uint8Array(t)}var Ye=V({prefix:"\u{1F680}",name:"base256emoji",encode:je,decode:Ke});var yt={};l(yt,{base32:()=>$,base32hex:()=>nr,base32hexpad:()=>or,base32hexpadupper:()=>sr,base32hexupper:()=>ir,base32pad:()=>er,base32padupper:()=>rr,base32upper:()=>tr,base32z:()=>cr});var $=h({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),tr=h({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),er=h({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),rr=h({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),nr=h({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),ir=h({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),or=h({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),sr=h({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),cr=h({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var Et={};l(Et,{base36:()=>ar,base36upper:()=>hr});var ar=T({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),hr=T({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var St={};l(St,{base58btc:()=>I,base58flickr:()=>dr});var I=T({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),dr=T({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var At={};l(At,{base64:()=>ur,base64pad:()=>fr,base64url:()=>pr,base64urlpad:()=>lr});var ur=h({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),fr=h({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),pr=h({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),lr=h({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var It={};l(It,{base8:()=>mr});var mr=h({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var Ft={};l(Ft,{identity:()=>xr});var xr=V({prefix:"\0",name:"identity",encode:r=>se(r),decode:r=>oe(r)});var Mn=new TextEncoder,Tn=new TextDecoder;var Ct={};l(Ct,{identity:()=>$r});var br=pe,ue=128,yr=127,Er=~yr,Sr=Math.pow(2,31);function pe(r,t,e){t=t||[],e=e||0;for(var n=e;r>=Sr;)t[e++]=r&255|ue,r/=128;for(;r&Er;)t[e++]=r&255|ue,r>>>=7;return t[e]=r|0,pe.bytes=e-n+1,t}var Ar=Nt,Ir=128,fe=127;function Nt(r,n){var e=0,n=n||0,i=0,o=n,s,c=r.length;do{if(o>=c)throw Nt.bytes=0,new RangeError("Could not decode varint");s=r[o++],e+=i<28?(s&fe)<<i:(s&fe)*Math.pow(2,i),i+=7}while(s>=Ir);return Nt.bytes=o-n,e}var Fr=Math.pow(2,7),Nr=Math.pow(2,14),Cr=Math.pow(2,21),Ur=Math.pow(2,28),Dr=Math.pow(2,35),Br=Math.pow(2,42),Mr=Math.pow(2,49),Tr=Math.pow(2,56),zr=Math.pow(2,63),kr=function(r){return r<Fr?1:r<Nr?2:r<Cr?3:r<Ur?4:r<Dr?5:r<Br?6:r<Mr?7:r<Tr?8:r<zr?9:10},Lr={encode:br,decode:Ar,encodingLength:kr},Rr=Lr,q=Rr;function X(r,t=0){return[q.decode(r,t),q.decode.bytes]}function O(r,t,e=0){return q.encode(r,t,e),t}function _(r){return q.encodingLength(r)}function L(r,t){let e=t.byteLength,n=_(r),i=n+_(e),o=new Uint8Array(i+e);return O(r,o,0),O(e,o,n),o.set(t,i),new G(r,e,t,o)}function le(r){let t=N(r),[e,n]=X(t),[i,o]=X(t.subarray(n)),s=t.subarray(n+o);if(s.byteLength!==i)throw new Error("Incorrect length");return new G(e,i,s,t)}function me(r,t){if(r===t)return!0;{let e=t;return r.code===e.code&&r.size===e.size&&e.bytes instanceof Uint8Array&&ie(r.bytes,e.bytes)}}var G=class{code;size;digest;bytes;constructor(t,e,n,i){this.code=t,this.size=e,this.digest=n,this.bytes=i}};var xe=0,vr="identity",ge=N;function Vr(r){return L(xe,ge(r))}var $r={code:xe,name:vr,encode:ge,digest:Vr};var Bt={};l(Bt,{sha256:()=>Or,sha512:()=>_r});function Dt({name:r,code:t,encode:e}){return new Ut(r,t,e)}var Ut=class{name;code;encode;constructor(t,e,n){this.name=t,this.code=e,this.encode=n}digest(t){if(t instanceof Uint8Array){let e=this.encode(t);return e instanceof Uint8Array?L(this.code,e):e.then(n=>L(this.code,n))}else throw Error("Unknown type, must be binary type")}};function be(r){return async t=>new Uint8Array(await crypto.subtle.digest(r,t))}var Or=Dt({name:"sha2-256",code:18,encode:be("SHA-256")}),_r=Dt({name:"sha2-512",code:19,encode:be("SHA-512")});function ye(r,t){let{bytes:e,version:n}=r;switch(n){case 0:return Pr(e,Mt(r),t??I.encoder);default:return qr(e,Mt(r),t??$.encoder)}}var Ee=new WeakMap;function Mt(r){let t=Ee.get(r);if(t==null){let e=new Map;return Ee.set(r,e),e}return t}var rt=class r{code;version;multihash;bytes;"/";constructor(t,e,n,i){this.code=e,this.version=t,this.multihash=n,this.bytes=i,this["/"]=i}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:t,multihash:e}=this;if(t!==W)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(e.code!==Xr)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return r.createV0(e)}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:t,digest:e}=this.multihash,n=L(t,e);return r.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(t){return r.equals(this,t)}static equals(t,e){let n=e;return n!=null&&t.code===n.code&&t.version===n.version&&me(t.multihash,n.multihash)}toString(t){return ye(this,t)}toJSON(){return{"/":ye(this)}}link(){return this}[Symbol.toStringTag]="CID";[Symbol.for("nodejs.util.inspect.custom")](){return`CID(${this.toString()})`}static asCID(t){if(t==null)return null;let e=t;if(e instanceof r)return e;if(e["/"]!=null&&e["/"]===e.bytes||e.asCID===e){let{version:n,code:i,multihash:o,bytes:s}=e;return new r(n,i,o,s??Se(n,i,o.bytes))}else if(e[Jr]===!0){let{version:n,multihash:i,code:o}=e,s=le(i);return r.create(n,o,s)}else return null}static create(t,e,n){if(typeof e!="number")throw new Error("String codecs are no longer supported");if(!(n.bytes instanceof Uint8Array))throw new Error("Invalid digest");switch(t){case 0:{if(e!==W)throw new Error(`Version 0 CID must use dag-pb (code: ${W}) block encoding`);return new r(t,e,n,n.bytes)}case 1:{let i=Se(t,e,n.bytes);return new r(t,e,n,i)}default:throw new Error("Invalid version")}}static createV0(t){return r.create(0,W,t)}static createV1(t,e){return r.create(1,t,e)}static decode(t){let[e,n]=r.decodeFirst(t);if(n.length!==0)throw new Error("Incorrect length");return e}static decodeFirst(t){let e=r.inspectBytes(t),n=e.size-e.multihashSize,i=N(t.subarray(n,n+e.multihashSize));if(i.byteLength!==e.multihashSize)throw new Error("Incorrect length");let o=i.subarray(e.multihashSize-e.digestSize),s=new G(e.multihashCode,e.digestSize,o,i);return[e.version===0?r.createV0(s):r.createV1(e.codec,s),t.subarray(e.size)]}static inspectBytes(t){let e=0,n=()=>{let[v,K]=X(t.subarray(e));return e+=K,v},i=n(),o=W;if(i===18?(i=0,e=0):o=n(),i!==0&&i!==1)throw new RangeError(`Invalid CID version ${i}`);let s=e,c=n(),d=n(),C=e+d,x=C-s;return{version:i,codec:o,multihashCode:c,digestSize:d,multihashSize:x,size:C}}static parse(t,e){let[n,i]=Gr(t,e),o=r.decode(i);if(o.version===0&&t[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return Mt(o).set(n,t),o}};function Gr(r,t){switch(r[0]){case"Q":{let e=t??I;return[I.prefix,e.decode(`${I.prefix}${r}`)]}case I.prefix:{let e=t??I;return[I.prefix,e.decode(r)]}case $.prefix:{let e=t??$;return[$.prefix,e.decode(r)]}default:{if(t==null)throw Error("To parse non base32 or base58btc encoded CID multibase decoder must be provided");return[r[0],t.decode(r)]}}}function Pr(r,t,e){let{prefix:n}=e;if(n!==I.prefix)throw Error(`Cannot string encode V0 in ${e.name} encoding`);let i=t.get(n);if(i==null){let o=e.encode(r).slice(1);return t.set(n,o),o}else return i}function qr(r,t,e){let{prefix:n}=e,i=t.get(n);if(i==null){let o=e.encode(r);return t.set(n,o),o}else return i}var W=112,Xr=18;function Se(r,t,e){let n=_(r),i=n+_(t),o=new Uint8Array(i+e.byteLength);return O(r,o,0),O(t,o,n),o.set(e,i),o}var Jr=Symbol.for("@ipld/js-cid/CID");var Tt={...Ft,...wt,...It,...xt,...gt,...yt,...Et,...St,...At,...bt},Yn={...Bt,...Ct};function Ie(r,t,e,n){return{name:r,prefix:t,encoder:{name:r,prefix:t,encode:e},decoder:{decode:n}}}var Ae=Ie("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),zt=Ie("ascii","a",r=>{let t="a";for(let e=0;e<r.length;e++)t+=String.fromCharCode(r[e]);return t},r=>{r=r.substring(1);let t=D(r.length);for(let e=0;e<r.length;e++)t[e]=r.charCodeAt(e);return t}),Wr={utf8:Ae,"utf-8":Ae,hex:Tt.base16,latin1:zt,ascii:zt,binary:zt,...Tt},Fe=Wr;function Ne(r,t="utf8"){let e=Fe[t];if(e==null)throw new Error(`Unsupported encoding "${t}"`);return e.decoder.decode(`${e.prefix}${r}`)}function kt(r){let t=r??8192,e=t>>>1,n,i=t;return function(s){if(s<1||s>e)return D(s);i+s>t&&(n=D(t),i=0);let c=n.subarray(i,i+=s);return i&7&&(i=(i|7)+1),c}}var R=class{fn;len;next;val;constructor(t,e,n){this.fn=t,this.len=e,this.next=void 0,this.val=n}};function Lt(){}var vt=class{head;tail;len;next;constructor(t){this.head=t.head,this.tail=t.tail,this.len=t.len,this.next=t.states}},Hr=kt();function Qr(r){return globalThis.Buffer!=null?D(r):Hr(r)}var Q=class{len;head;tail;states;constructor(){this.len=0,this.head=new R(Lt,0,0),this.tail=this.head,this.states=null}_push(t,e,n){return this.tail=this.tail.next=new R(t,e,n),this.len+=e,this}uint32(t){return this.len+=(this.tail=this.tail.next=new Vt((t=t>>>0)<128?1:t<16384?2:t<2097152?3:t<268435456?4:5,t)).len,this}int32(t){return t<0?this._push(nt,10,m.fromNumber(t)):this.uint32(t)}sint32(t){return this.uint32((t<<1^t>>31)>>>0)}uint64(t){let e=m.fromBigInt(t);return this._push(nt,e.length(),e)}uint64Number(t){return this._push(Ht,P(t),t)}uint64String(t){return this.uint64(BigInt(t))}int64(t){return this.uint64(t)}int64Number(t){return this.uint64Number(t)}int64String(t){return this.uint64String(t)}sint64(t){let e=m.fromBigInt(t).zzEncode();return this._push(nt,e.length(),e)}sint64Number(t){let e=m.fromNumber(t).zzEncode();return this._push(nt,e.length(),e)}sint64String(t){return this.sint64(BigInt(t))}bool(t){return this._push(Rt,1,t?1:0)}fixed32(t){return this._push(H,4,t>>>0)}sfixed32(t){return this.fixed32(t)}fixed64(t){let e=m.fromBigInt(t);return this._push(H,4,e.lo)._push(H,4,e.hi)}fixed64Number(t){let e=m.fromNumber(t);return this._push(H,4,e.lo)._push(H,4,e.hi)}fixed64String(t){return this.fixed64(BigInt(t))}sfixed64(t){return this.fixed64(t)}sfixed64Number(t){return this.fixed64Number(t)}sfixed64String(t){return this.fixed64String(t)}float(t){return this._push(Zt,4,t)}double(t){return this._push(Kt,8,t)}bytes(t){let e=t.length>>>0;return e===0?this._push(Rt,1,0):this.uint32(e)._push(jr,e,t)}string(t){let e=ee(t);return e!==0?this.uint32(e)._push(at,e,t):this._push(Rt,1,0)}fork(){return this.states=new vt(this),this.head=this.tail=new R(Lt,0,0),this.len=0,this}reset(){return this.states!=null?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new R(Lt,0,0),this.len=0),this}ldelim(){let t=this.head,e=this.tail,n=this.len;return this.reset().uint32(n),n!==0&&(this.tail.next=t.next,this.tail=e,this.len+=n),this}finish(){let t=this.head.next,e=Qr(this.len),n=0;for(;t!=null;)t.fn(t.val,e,n),n+=t.len,t=t.next;return e}};function Rt(r,t,e){t[e]=r&255}function Zr(r,t,e){for(;r>127;)t[e++]=r&127|128,r>>>=7;t[e]=r}var Vt=class extends R{next;constructor(t,e){super(Zr,t,e),this.next=void 0}};function nt(r,t,e){for(;r.hi!==0;)t[e++]=r.lo&127|128,r.lo=(r.lo>>>7|r.hi<<25)>>>0,r.hi>>>=7;for(;r.lo>127;)t[e++]=r.lo&127|128,r.lo=r.lo>>>7;t[e++]=r.lo}function H(r,t,e){t[e]=r&255,t[e+1]=r>>>8&255,t[e+2]=r>>>16&255,t[e+3]=r>>>24}function jr(r,t,e){t.set(r,e)}globalThis.Buffer!=null&&(Q.prototype.bytes=function(r){let t=r.length>>>0;return this.uint32(t),t>0&&this._push(Kr,t,r),this},Q.prototype.string=function(r){let t=globalThis.Buffer.byteLength(r);return this.uint32(t),t>0&&this._push(Yr,t,r),this});function Kr(r,t,e){t.set(r,e)}function Yr(r,t,e){r.length<40?at(r,t,e):t.utf8Write!=null?t.utf8Write(r,e):t.set(Ne(r),e)}function $t(){return new Q}function Ot(r,t){let e=$t();return t.encode(r,e,{lengthDelimited:!1}),e.finish()}var Z;(function(r){r[r.VARINT=0]="VARINT",r[r.BIT64=1]="BIT64",r[r.LENGTH_DELIMITED=2]="LENGTH_DELIMITED",r[r.START_GROUP=3]="START_GROUP",r[r.END_GROUP=4]="END_GROUP",r[r.BIT32=5]="BIT32"})(Z||(Z={}));function _t(r,t,e,n){return{name:r,type:t,encode:e,decode:n}}function Gt(r,t){return _t("message",Z.LENGTH_DELIMITED,r,t)}var j;(function(r){let t;r.codec=()=>(t==null&&(t=Gt((e,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),e.key!=null&&e.key.byteLength>0&&(n.uint32(10),n.bytes(e.key)),e.value!=null&&e.value.byteLength>0&&(n.uint32(18),n.bytes(e.value)),e.timeReceived!=null&&e.timeReceived!==""&&(n.uint32(42),n.string(e.timeReceived)),i.lengthDelimited!==!1&&n.ldelim()},(e,n,i={})=>{let o={key:ot(0),value:ot(0),timeReceived:""},s=n==null?e.len:e.pos+n;for(;e.pos<s;){let c=e.uint32();switch(c>>>3){case 1:{o.key=e.bytes();break}case 2:{o.value=e.bytes();break}case 5:{o.timeReceived=e.string();break}default:{e.skipType(c&7);break}}}return o})),t),r.encode=e=>Ot(e,r.codec()),r.decode=(e,n)=>ut(e,r.codec(),n)})(j||(j={}));function Ce(r){let t=r.getUTCFullYear(),e=String(r.getUTCMonth()+1).padStart(2,"0"),n=String(r.getUTCDate()).padStart(2,"0"),i=String(r.getUTCHours()).padStart(2,"0"),o=String(r.getUTCMinutes()).padStart(2,"0"),s=String(r.getUTCSeconds()).padStart(2,"0"),c=r.getUTCMilliseconds(),d=String(c*1e3*1e3).padStart(9,"0");return`${t}-${e}-${n}T${i}:${o}:${s}.${d}Z`}function Ue(r){let t=new RegExp("(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})\\.(\\d+)Z"),e=String(r).trim().match(t);if(e==null)throw new Error("Invalid format");let n=parseInt(e[1],10),i=parseInt(e[2],10)-1,o=parseInt(e[3],10),s=parseInt(e[4],10),c=parseInt(e[5],10),d=parseInt(e[6],10),C=parseInt(e[7].slice(0,-6),10);return new Date(Date.UTC(n,i,o,s,c,d,C))}var Pt=class r{key;value;timeReceived;constructor(t,e,n){if(!(t instanceof Uint8Array))throw new Error("key must be a Uint8Array");if(!(e instanceof Uint8Array))throw new Error("value must be a Uint8Array");this.key=t,this.value=e,this.timeReceived=n}serialize(){return j.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:Ce(this.timeReceived)}}static deserialize(t){let e=j.decode(t);return new r(e.key,e.value,new Date(e.timeReceived))}static fromDeserialized(t){let e=Ue(t.timeReceived);if(t.key==null)throw new Error("key missing from deserialized object");if(t.value==null)throw new Error("value missing from deserialized object");return new r(t.key,t.value,e)}};return ke(en);})();
3
3
  return Libp2PRecord}));
@@ -1,5 +1,32 @@
1
- import type { Uint8ArrayList } from 'uint8arraylist';
1
+ /**
2
+ * @packageDocumentation
3
+ *
4
+ * This is an implementation of the [routing record format](https://github.com/libp2p/specs/blob/b9efe152c29f93f7a87931c14d78ae11e7924d5a/kad-dht/README.md?plain=1#L408-L425) used by libp2p to store data in the datastore passed to the libp2p constructor.
5
+ *
6
+ * @example Deserialization
7
+ *
8
+ * ```TypeScript
9
+ * import { Libp2pRecord } from '@libp2p/record'
10
+ *
11
+ * const buf = Uint8Array.from([0, 1, 2, 3])
12
+ * const record = Libp2pRecord.deserialize(buf)
13
+ * ```
14
+ *
15
+ * @example Serialization
16
+ *
17
+ * ```TypeScript
18
+ * import { Libp2pRecord } from '@libp2p/record'
19
+ *
20
+ * const key = Uint8Array.from([0, 1, 2, 3])
21
+ * const value = Uint8Array.from([0, 1, 2, 3])
22
+ * const timeReceived = new Date()
23
+ *
24
+ * const record = new Libp2pRecord(key, value, timeReceived)
25
+ * const buf = record.serialize()
26
+ * ```
27
+ */
2
28
  import { Record } from './record.js';
29
+ import type { Uint8ArrayList } from 'uint8arraylist';
3
30
  export declare class Libp2pRecord {
4
31
  key: Uint8Array;
5
32
  value: Uint8Array;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EACL,MAAM,EACP,MAAM,aAAa,CAAA;AAGpB,qBAAa,YAAY;IAChB,GAAG,EAAE,UAAU,CAAA;IACf,KAAK,EAAE,UAAU,CAAA;IACjB,YAAY,EAAE,IAAI,CAAA;gBAEZ,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI;IAcnE,SAAS,IAAK,UAAU;IAIxB;;OAEG;IACH,gBAAgB,IAAK,MAAM;IAQ3B;;OAEG;IACH,MAAM,CAAC,WAAW,CAAE,GAAG,EAAE,UAAU,GAAG,cAAc,GAAG,YAAY;IAMnE;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAE,GAAG,EAAE,MAAM,GAAG,YAAY;CAiBpD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EACL,MAAM,EACP,MAAM,aAAa,CAAA;AAEpB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,qBAAa,YAAY;IAChB,GAAG,EAAE,UAAU,CAAA;IACf,KAAK,EAAE,UAAU,CAAA;IACjB,YAAY,EAAE,IAAI,CAAA;gBAEZ,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI;IAcnE,SAAS,IAAK,UAAU;IAIxB;;OAEG;IACH,gBAAgB,IAAK,MAAM;IAQ3B;;OAEG;IACH,MAAM,CAAC,WAAW,CAAE,GAAG,EAAE,UAAU,GAAG,cAAc,GAAG,YAAY;IAMnE;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAE,GAAG,EAAE,MAAM,GAAG,YAAY;CAiBpD"}
package/dist/src/index.js CHANGED
@@ -1,6 +1,36 @@
1
+ /**
2
+ * @packageDocumentation
3
+ *
4
+ * This is an implementation of the [routing record format](https://github.com/libp2p/specs/blob/b9efe152c29f93f7a87931c14d78ae11e7924d5a/kad-dht/README.md?plain=1#L408-L425) used by libp2p to store data in the datastore passed to the libp2p constructor.
5
+ *
6
+ * @example Deserialization
7
+ *
8
+ * ```TypeScript
9
+ * import { Libp2pRecord } from '@libp2p/record'
10
+ *
11
+ * const buf = Uint8Array.from([0, 1, 2, 3])
12
+ * const record = Libp2pRecord.deserialize(buf)
13
+ * ```
14
+ *
15
+ * @example Serialization
16
+ *
17
+ * ```TypeScript
18
+ * import { Libp2pRecord } from '@libp2p/record'
19
+ *
20
+ * const key = Uint8Array.from([0, 1, 2, 3])
21
+ * const value = Uint8Array.from([0, 1, 2, 3])
22
+ * const timeReceived = new Date()
23
+ *
24
+ * const record = new Libp2pRecord(key, value, timeReceived)
25
+ * const buf = record.serialize()
26
+ * ```
27
+ */
1
28
  import { Record } from './record.js';
2
29
  import * as utils from './utils.js';
3
30
  export class Libp2pRecord {
31
+ key;
32
+ value;
33
+ timeReceived;
4
34
  constructor(key, value, timeReceived) {
5
35
  if (!(key instanceof Uint8Array)) {
6
36
  throw new Error('key must be a Uint8Array');
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,MAAM,EACP,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC,MAAM,OAAO,YAAY;IAKvB,YAAa,GAAe,EAAE,KAAiB,EAAE,YAAkB;QACjE,IAAI,CAAC,CAAC,GAAG,YAAY,UAAU,CAAC,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;SAC5C;QAED,IAAI,CAAC,CAAC,KAAK,YAAY,UAAU,CAAC,EAAE;YAClC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;SAC9C;QAED,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IAClC,CAAC;IAED,SAAS;QACP,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAA;IAC/C,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC;SACjD,CAAA;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,WAAW,CAAE,GAAgC;QAClD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAE9B,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAA;IACzE,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAE,GAAW;QAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QAErD,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;SACxD;QAED,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;SAC1D;QAED,MAAM,GAAG,GAAG,IAAI,YAAY,CAC1B,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,QAAQ,CAC7B,CAAA;QAED,OAAO,GAAG,CAAA;IACZ,CAAC;CACF"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EACL,MAAM,EACP,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAGnC,MAAM,OAAO,YAAY;IAChB,GAAG,CAAY;IACf,KAAK,CAAY;IACjB,YAAY,CAAM;IAEzB,YAAa,GAAe,EAAE,KAAiB,EAAE,YAAkB;QACjE,IAAI,CAAC,CAAC,GAAG,YAAY,UAAU,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;QAC7C,CAAC;QAED,IAAI,CAAC,CAAC,KAAK,YAAY,UAAU,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;QAC/C,CAAC;QAED,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IAClC,CAAC;IAED,SAAS;QACP,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAA;IAC/C,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC;SACjD,CAAA;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,WAAW,CAAE,GAAgC;QAClD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAE9B,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAA;IACzE,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAE,GAAW;QAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QAErD,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;QACzD,CAAC;QAED,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;QAC3D,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,YAAY,CAC1B,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,QAAQ,CAC7B,CAAA;QAED,OAAO,GAAG,CAAA;IACZ,CAAC;CACF"}
@@ -1,4 +1,4 @@
1
- import type { Codec } from 'protons-runtime';
1
+ import { type Codec, type DecodeOptions } from 'protons-runtime';
2
2
  import type { Uint8ArrayList } from 'uint8arraylist';
3
3
  export interface Record {
4
4
  key: Uint8Array;
@@ -8,6 +8,6 @@ export interface Record {
8
8
  export declare namespace Record {
9
9
  const codec: () => Codec<Record>;
10
10
  const encode: (obj: Partial<Record>) => Uint8Array;
11
- const decode: (buf: Uint8Array | Uint8ArrayList) => Record;
11
+ const decode: (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Record>) => Record;
12
12
  }
13
13
  //# sourceMappingURL=record.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../src/record.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,UAAU,CAAA;IACf,KAAK,EAAE,UAAU,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,yBAAiB,MAAM,CAAC;IAGf,MAAM,KAAK,QAAO,MAAM,MAAM,CA0DpC,CAAA;IAEM,MAAM,MAAM,QAAS,QAAQ,MAAM,CAAC,KAAG,UAE7C,CAAA;IAEM,MAAM,MAAM,QAAS,UAAU,GAAG,cAAc,KAAG,MAEzD,CAAA;CACF"}
1
+ {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../src/record.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,KAAK,EAAiB,KAAK,aAAa,EAA0B,MAAM,iBAAiB,CAAA;AAEvG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,UAAU,CAAA;IACf,KAAK,EAAE,UAAU,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,yBAAiB,MAAM,CAAC;IAGf,MAAM,KAAK,QAAO,MAAM,MAAM,CA8DpC,CAAA;IAEM,MAAM,MAAM,QAAS,QAAQ,MAAM,CAAC,KAAG,UAE7C,CAAA;IAEM,MAAM,MAAM,QAAS,UAAU,GAAG,cAAc,SAAS,cAAc,MAAM,CAAC,KAAG,MAEvF,CAAA;CACF"}
@@ -3,7 +3,8 @@
3
3
  /* eslint-disable @typescript-eslint/no-namespace */
4
4
  /* eslint-disable @typescript-eslint/no-unnecessary-boolean-literal-compare */
5
5
  /* eslint-disable @typescript-eslint/no-empty-interface */
6
- import { encodeMessage, decodeMessage, message } from 'protons-runtime';
6
+ import { decodeMessage, encodeMessage, message } from 'protons-runtime';
7
+ import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc';
7
8
  export var Record;
8
9
  (function (Record) {
9
10
  let _codec;
@@ -28,28 +29,32 @@ export var Record;
28
29
  if (opts.lengthDelimited !== false) {
29
30
  w.ldelim();
30
31
  }
31
- }, (reader, length) => {
32
+ }, (reader, length, opts = {}) => {
32
33
  const obj = {
33
- key: new Uint8Array(0),
34
- value: new Uint8Array(0),
34
+ key: uint8ArrayAlloc(0),
35
+ value: uint8ArrayAlloc(0),
35
36
  timeReceived: ''
36
37
  };
37
38
  const end = length == null ? reader.len : reader.pos + length;
38
39
  while (reader.pos < end) {
39
40
  const tag = reader.uint32();
40
41
  switch (tag >>> 3) {
41
- case 1:
42
+ case 1: {
42
43
  obj.key = reader.bytes();
43
44
  break;
44
- case 2:
45
+ }
46
+ case 2: {
45
47
  obj.value = reader.bytes();
46
48
  break;
47
- case 5:
49
+ }
50
+ case 5: {
48
51
  obj.timeReceived = reader.string();
49
52
  break;
50
- default:
53
+ }
54
+ default: {
51
55
  reader.skipType(tag & 7);
52
56
  break;
57
+ }
53
58
  }
54
59
  }
55
60
  return obj;
@@ -60,8 +65,8 @@ export var Record;
60
65
  Record.encode = (obj) => {
61
66
  return encodeMessage(obj, Record.codec());
62
67
  };
63
- Record.decode = (buf) => {
64
- return decodeMessage(buf, Record.codec());
68
+ Record.decode = (buf, opts) => {
69
+ return decodeMessage(buf, Record.codec(), opts);
65
70
  };
66
71
  })(Record || (Record = {}));
67
72
  //# sourceMappingURL=record.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/record.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,+BAA+B;AAC/B,oDAAoD;AACpD,8EAA8E;AAC9E,0DAA0D;AAE1D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAUvE,MAAM,KAAW,MAAM,CAsEtB;AAtED,WAAiB,MAAM;IACrB,IAAI,MAAqB,CAAA;IAEZ,YAAK,GAAG,GAAkB,EAAE;QACvC,IAAI,MAAM,IAAI,IAAI,EAAE;YAClB,MAAM,GAAG,OAAO,CAAS,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE;gBAC7C,IAAI,IAAI,CAAC,eAAe,KAAK,KAAK,EAAE;oBAClC,CAAC,CAAC,IAAI,EAAE,CAAA;iBACT;gBAED,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE;oBAC/C,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;oBACZ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;iBACjB;gBAED,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE;oBACnD,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;oBACZ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;iBACnB;gBAED,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,IAAI,GAAG,CAAC,YAAY,KAAK,EAAE,CAAC,EAAE;oBACzD,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;oBACZ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;iBAC3B;gBAED,IAAI,IAAI,CAAC,eAAe,KAAK,KAAK,EAAE;oBAClC,CAAC,CAAC,MAAM,EAAE,CAAA;iBACX;YACH,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;gBACpB,MAAM,GAAG,GAAQ;oBACf,GAAG,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC;oBACtB,KAAK,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC;oBACxB,YAAY,EAAE,EAAE;iBACjB,CAAA;gBAED,MAAM,GAAG,GAAG,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAA;gBAE7D,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;oBACvB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;oBAE3B,QAAQ,GAAG,KAAK,CAAC,EAAE;wBACjB,KAAK,CAAC;4BACJ,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,CAAA;4BACxB,MAAK;wBACP,KAAK,CAAC;4BACJ,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAA;4BAC1B,MAAK;wBACP,KAAK,CAAC;4BACJ,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;4BAClC,MAAK;wBACP;4BACE,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;4BACxB,MAAK;qBACR;iBACF;gBAED,OAAO,GAAG,CAAA;YACZ,CAAC,CAAC,CAAA;SACH;QAED,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;IAEY,aAAM,GAAG,CAAC,GAAoB,EAAc,EAAE;QACzD,OAAO,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;IAC3C,CAAC,CAAA;IAEY,aAAM,GAAG,CAAC,GAAgC,EAAU,EAAE;QACjE,OAAO,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;IAC3C,CAAC,CAAA;AACH,CAAC,EAtEgB,MAAM,KAAN,MAAM,QAsEtB"}
1
+ {"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/record.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAE,IAAU;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;IAClC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC7D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACtD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACxD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC7D,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAA;IAC9C,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAEvE,OAAO,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,MAAM,IAAI,OAAO,IAAI,WAAW,GAAG,CAAA;AAC/E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAE,IAAY;IACxC,MAAM,cAAc,GAAG,IAAI,MAAM;IAC/B,cAAc;IACd,6BAA6B;QAC7B,WAAW;QACX,4BAA4B;QAC5B,cAAc;QACd,YAAY,CACb,CAAA;IACD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;IAEnD,IAAI,CAAC,IAAI,IAAI,EAAE;QACb,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;KAClC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAA;IACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAC/B,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACjC,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACjC,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAEnD,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAA;AACjF,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAE,IAAU;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;IAClC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC7D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACtD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACxD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC7D,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAA;IAC9C,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAEvE,OAAO,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,MAAM,IAAI,OAAO,IAAI,WAAW,GAAG,CAAA;AAC/E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAE,IAAY;IACxC,MAAM,cAAc,GAAG,IAAI,MAAM;IAC/B,cAAc;IACd,6BAA6B;QAC7B,WAAW;QACX,4BAA4B;QAC5B,cAAc;QACd,YAAY,CACb,CAAA;IACD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;IAEnD,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;IACnC,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAA;IACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAC/B,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACjC,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACjC,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAEnD,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAA;AACjF,CAAC"}
package/package.json CHANGED
@@ -1,42 +1,25 @@
1
1
  {
2
2
  "name": "@libp2p/record",
3
- "version": "3.0.3",
3
+ "version": "3.0.4-3e515f007",
4
4
  "description": "libp2p record implementation",
5
- "author": "Friedel Ziegelmayer <dignifiedquire@gmail.com>",
6
5
  "license": "Apache-2.0 OR MIT",
7
- "homepage": "https://github.com/libp2p/js-libp2p-record#readme",
6
+ "homepage": "https://github.com/libp2p/js-libp2p/tree/main/packages/record#readme",
8
7
  "repository": {
9
8
  "type": "git",
10
- "url": "git+https://github.com/libp2p/js-libp2p-record.git"
9
+ "url": "git+https://github.com/libp2p/js-libp2p.git"
11
10
  },
12
11
  "bugs": {
13
- "url": "https://github.com/libp2p/js-libp2p-record/issues"
12
+ "url": "https://github.com/libp2p/js-libp2p/issues"
13
+ },
14
+ "publishConfig": {
15
+ "access": "public",
16
+ "provenance": true
14
17
  },
15
18
  "keywords": [
16
19
  "IPFS"
17
20
  ],
18
- "engines": {
19
- "node": ">=16.0.0",
20
- "npm": ">=7.0.0"
21
- },
22
21
  "type": "module",
23
22
  "types": "./dist/src/index.d.ts",
24
- "typesVersions": {
25
- "*": {
26
- "*": [
27
- "*",
28
- "dist/*",
29
- "dist/src/*",
30
- "dist/src/*/index"
31
- ],
32
- "src/*": [
33
- "*",
34
- "dist/*",
35
- "dist/src/*",
36
- "dist/src/*/index"
37
- ]
38
- }
39
- },
40
23
  "files": [
41
24
  "src",
42
25
  "dist",
@@ -47,136 +30,44 @@
47
30
  ".": {
48
31
  "types": "./dist/src/index.d.ts",
49
32
  "import": "./dist/src/index.js"
50
- },
51
- "./selectors": {
52
- "types": "./dist/src/selectors.d.ts",
53
- "import": "./dist/src/selectors.js"
54
- },
55
- "./validators": {
56
- "types": "./dist/src/validators.d.ts",
57
- "import": "./dist/src/validators.js"
58
33
  }
59
34
  },
60
35
  "eslintConfig": {
61
36
  "extends": "ipfs",
62
37
  "parserOptions": {
38
+ "project": true,
63
39
  "sourceType": "module"
64
40
  },
65
41
  "ignorePatterns": [
66
- "src/record.d.ts"
67
- ]
68
- },
69
- "release": {
70
- "branches": [
71
- "master"
72
- ],
73
- "plugins": [
74
- [
75
- "@semantic-release/commit-analyzer",
76
- {
77
- "preset": "conventionalcommits",
78
- "releaseRules": [
79
- {
80
- "breaking": true,
81
- "release": "major"
82
- },
83
- {
84
- "revert": true,
85
- "release": "patch"
86
- },
87
- {
88
- "type": "feat",
89
- "release": "minor"
90
- },
91
- {
92
- "type": "fix",
93
- "release": "patch"
94
- },
95
- {
96
- "type": "docs",
97
- "release": "patch"
98
- },
99
- {
100
- "type": "test",
101
- "release": "patch"
102
- },
103
- {
104
- "type": "deps",
105
- "release": "patch"
106
- },
107
- {
108
- "scope": "no-release",
109
- "release": false
110
- }
111
- ]
112
- }
113
- ],
114
- [
115
- "@semantic-release/release-notes-generator",
116
- {
117
- "preset": "conventionalcommits",
118
- "presetConfig": {
119
- "types": [
120
- {
121
- "type": "feat",
122
- "section": "Features"
123
- },
124
- {
125
- "type": "fix",
126
- "section": "Bug Fixes"
127
- },
128
- {
129
- "type": "chore",
130
- "section": "Trivial Changes"
131
- },
132
- {
133
- "type": "docs",
134
- "section": "Documentation"
135
- },
136
- {
137
- "type": "deps",
138
- "section": "Dependencies"
139
- },
140
- {
141
- "type": "test",
142
- "section": "Tests"
143
- }
144
- ]
145
- }
146
- }
147
- ],
148
- "@semantic-release/changelog",
149
- "@semantic-release/npm",
150
- "@semantic-release/github",
151
- "@semantic-release/git"
42
+ "src/message/dht.d.ts"
152
43
  ]
153
44
  },
154
45
  "scripts": {
155
46
  "clean": "aegir clean",
156
47
  "lint": "aegir lint",
157
- "dep-check": "aegir dep-check -i protons",
48
+ "build": "aegir build",
49
+ "generate": "protons ./src/record.proto",
158
50
  "test": "aegir test",
159
- "test:node": "aegir test -t node",
160
- "test:chrome": "aegir test -t browser",
51
+ "test:node": "aegir test -t node --cov",
52
+ "test:chrome": "aegir test -t browser --cov",
161
53
  "test:chrome-webworker": "aegir test -t webworker",
162
54
  "test:firefox": "aegir test -t browser -- --browser firefox",
163
55
  "test:firefox-webworker": "aegir test -t webworker -- --browser firefox",
164
- "build": "aegir build",
165
- "generate": "protons ./src/record.proto",
166
- "release": "aegir release",
167
- "docs": "aegir docs"
56
+ "dep-check": "aegir dep-check",
57
+ "doc-check": "aegir doc-check"
168
58
  },
169
59
  "dependencies": {
170
- "@libp2p/interface-dht": "^2.0.0",
171
- "@libp2p/interfaces": "^3.2.0",
172
- "multiformats": "^11.0.0",
173
- "protons-runtime": "^5.0.0",
174
- "uint8arraylist": "^2.1.1",
175
- "uint8arrays": "^4.0.2"
60
+ "protons-runtime": "^5.4.0",
61
+ "uint8arraylist": "^2.4.8",
62
+ "uint8arrays": "^5.0.3"
176
63
  },
177
64
  "devDependencies": {
178
- "@libp2p/crypto": "^1.0.11",
179
- "aegir": "^38.1.7",
180
- "protons": "^7.0.2"
181
- }
65
+ "@types/lodash.random": "^3.2.9",
66
+ "@types/lodash.range": "^3.2.9",
67
+ "@types/which": "^3.0.3",
68
+ "aegir": "^42.2.5",
69
+ "multiformats": "^13.1.0",
70
+ "protons": "^7.5.0"
71
+ },
72
+ "sideEffects": false
182
73
  }
package/src/index.ts CHANGED
@@ -1,8 +1,36 @@
1
- import type { Uint8ArrayList } from 'uint8arraylist'
1
+ /**
2
+ * @packageDocumentation
3
+ *
4
+ * This is an implementation of the [routing record format](https://github.com/libp2p/specs/blob/b9efe152c29f93f7a87931c14d78ae11e7924d5a/kad-dht/README.md?plain=1#L408-L425) used by libp2p to store data in the datastore passed to the libp2p constructor.
5
+ *
6
+ * @example Deserialization
7
+ *
8
+ * ```TypeScript
9
+ * import { Libp2pRecord } from '@libp2p/record'
10
+ *
11
+ * const buf = Uint8Array.from([0, 1, 2, 3])
12
+ * const record = Libp2pRecord.deserialize(buf)
13
+ * ```
14
+ *
15
+ * @example Serialization
16
+ *
17
+ * ```TypeScript
18
+ * import { Libp2pRecord } from '@libp2p/record'
19
+ *
20
+ * const key = Uint8Array.from([0, 1, 2, 3])
21
+ * const value = Uint8Array.from([0, 1, 2, 3])
22
+ * const timeReceived = new Date()
23
+ *
24
+ * const record = new Libp2pRecord(key, value, timeReceived)
25
+ * const buf = record.serialize()
26
+ * ```
27
+ */
28
+
2
29
  import {
3
30
  Record
4
31
  } from './record.js'
5
32
  import * as utils from './utils.js'
33
+ import type { Uint8ArrayList } from 'uint8arraylist'
6
34
 
7
35
  export class Libp2pRecord {
8
36
  public key: Uint8Array
package/src/record.ts CHANGED
@@ -4,8 +4,8 @@
4
4
  /* eslint-disable @typescript-eslint/no-unnecessary-boolean-literal-compare */
5
5
  /* eslint-disable @typescript-eslint/no-empty-interface */
6
6
 
7
- import { encodeMessage, decodeMessage, message } from 'protons-runtime'
8
- import type { Codec } from 'protons-runtime'
7
+ import { type Codec, decodeMessage, type DecodeOptions, encodeMessage, message } from 'protons-runtime'
8
+ import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc'
9
9
  import type { Uint8ArrayList } from 'uint8arraylist'
10
10
 
11
11
  export interface Record {
@@ -42,10 +42,10 @@ export namespace Record {
42
42
  if (opts.lengthDelimited !== false) {
43
43
  w.ldelim()
44
44
  }
45
- }, (reader, length) => {
45
+ }, (reader, length, opts = {}) => {
46
46
  const obj: any = {
47
- key: new Uint8Array(0),
48
- value: new Uint8Array(0),
47
+ key: uint8ArrayAlloc(0),
48
+ value: uint8ArrayAlloc(0),
49
49
  timeReceived: ''
50
50
  }
51
51
 
@@ -55,18 +55,22 @@ export namespace Record {
55
55
  const tag = reader.uint32()
56
56
 
57
57
  switch (tag >>> 3) {
58
- case 1:
58
+ case 1: {
59
59
  obj.key = reader.bytes()
60
60
  break
61
- case 2:
61
+ }
62
+ case 2: {
62
63
  obj.value = reader.bytes()
63
64
  break
64
- case 5:
65
+ }
66
+ case 5: {
65
67
  obj.timeReceived = reader.string()
66
68
  break
67
- default:
69
+ }
70
+ default: {
68
71
  reader.skipType(tag & 7)
69
72
  break
73
+ }
70
74
  }
71
75
  }
72
76
 
@@ -81,7 +85,7 @@ export namespace Record {
81
85
  return encodeMessage(obj, Record.codec())
82
86
  }
83
87
 
84
- export const decode = (buf: Uint8Array | Uint8ArrayList): Record => {
85
- return decodeMessage(buf, Record.codec())
88
+ export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Record>): Record => {
89
+ return decodeMessage(buf, Record.codec(), opts)
86
90
  }
87
91
  }
@@ -1,7 +0,0 @@
1
- import type { Selectors } from '@libp2p/interface-dht';
2
- /**
3
- * Select the best record out of the given records
4
- */
5
- export declare function bestRecord(selectors: Selectors, k: Uint8Array, records: Uint8Array[]): number;
6
- export declare const selectors: Selectors;
7
- //# sourceMappingURL=selectors.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"selectors.d.ts","sourceRoot":"","sources":["../../src/selectors.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAEtD;;GAEG;AACH,wBAAgB,UAAU,CAAE,SAAS,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,CA6B9F;AAWD,eAAO,MAAM,SAAS,EAAE,SAEvB,CAAA"}
@@ -1,38 +0,0 @@
1
- import { CodeError } from '@libp2p/interfaces/errors';
2
- import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
3
- /**
4
- * Select the best record out of the given records
5
- */
6
- export function bestRecord(selectors, k, records) {
7
- if (records.length === 0) {
8
- const errMsg = 'No records given';
9
- throw new CodeError(errMsg, 'ERR_NO_RECORDS_RECEIVED');
10
- }
11
- const kStr = uint8ArrayToString(k);
12
- const parts = kStr.split('/');
13
- if (parts.length < 3) {
14
- const errMsg = 'Record key does not have a selector function';
15
- throw new CodeError(errMsg, 'ERR_NO_SELECTOR_FUNCTION_FOR_RECORD_KEY');
16
- }
17
- const selector = selectors[parts[1].toString()];
18
- if (selector == null) {
19
- const errMsg = `Unrecognized key prefix: ${parts[1]}`;
20
- throw new CodeError(errMsg, 'ERR_UNRECOGNIZED_KEY_PREFIX');
21
- }
22
- if (records.length === 1) {
23
- return 0;
24
- }
25
- return selector(k, records);
26
- }
27
- /**
28
- * Best record selector, for public key records.
29
- * Simply returns the first record, as all valid public key
30
- * records are equal
31
- */
32
- function publickKey(k, records) {
33
- return 0;
34
- }
35
- export const selectors = {
36
- pk: publickKey
37
- };
38
- //# sourceMappingURL=selectors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"selectors.js","sourceRoot":"","sources":["../../src/selectors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAGtE;;GAEG;AACH,MAAM,UAAU,UAAU,CAAE,SAAoB,EAAE,CAAa,EAAE,OAAqB;IACpF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;QACxB,MAAM,MAAM,GAAG,kBAAkB,CAAA;QAEjC,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAA;KACvD;IAED,MAAM,IAAI,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAA;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAE7B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACpB,MAAM,MAAM,GAAG,8CAA8C,CAAA;QAE7D,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE,yCAAyC,CAAC,CAAA;KACvE;IAED,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;IAE/C,IAAI,QAAQ,IAAI,IAAI,EAAE;QACpB,MAAM,MAAM,GAAG,4BAA4B,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;QAErD,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAA;KAC3D;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;QACxB,OAAO,CAAC,CAAA;KACT;IAED,OAAO,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;AAC7B,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAE,CAAa,EAAE,OAAqB;IACvD,OAAO,CAAC,CAAA;AACV,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAc;IAClC,EAAE,EAAE,UAAU;CACf,CAAA"}
@@ -1,10 +0,0 @@
1
- import type { Libp2pRecord } from './index.js';
2
- import type { Validators } from '@libp2p/interface-dht';
3
- /**
4
- * Checks a record and ensures it is still valid.
5
- * It runs the needed validators.
6
- * If verification fails the returned Promise will reject with the error.
7
- */
8
- export declare function verifyRecord(validators: Validators, record: Libp2pRecord): Promise<void>;
9
- export declare const validators: Validators;
10
- //# sourceMappingURL=validators.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/validators.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAIvD;;;;GAIG;AACH,wBAAsB,YAAY,CAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB/F;AAmCD,eAAO,MAAM,UAAU,EAAE,UAExB,CAAA"}
@@ -1,54 +0,0 @@
1
- import { CodeError } from '@libp2p/interfaces/errors';
2
- import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
3
- import { sha256 } from 'multiformats/hashes/sha2';
4
- import { equals as uint8ArrayEquals } from 'uint8arrays/equals';
5
- /**
6
- * Checks a record and ensures it is still valid.
7
- * It runs the needed validators.
8
- * If verification fails the returned Promise will reject with the error.
9
- */
10
- export async function verifyRecord(validators, record) {
11
- const key = record.key;
12
- const keyString = uint8ArrayToString(key);
13
- const parts = keyString.split('/');
14
- if (parts.length < 3) {
15
- // No validator available
16
- return;
17
- }
18
- const validator = validators[parts[1].toString()];
19
- if (validator == null) {
20
- const errMsg = 'Invalid record keytype';
21
- throw new CodeError(errMsg, 'ERR_INVALID_RECORD_KEY_TYPE');
22
- }
23
- await validator(key, record.value);
24
- }
25
- /**
26
- * Validator for public key records.
27
- * Verifies that the passed in record value is the PublicKey
28
- * that matches the passed in key.
29
- * If validation fails the returned Promise will reject with the error.
30
- *
31
- * @param {Uint8Array} key - A valid key is of the form `'/pk/<keymultihash>'`
32
- * @param {Uint8Array} publicKey - The public key to validate against (protobuf encoded).
33
- */
34
- const validatePublicKeyRecord = async (key, publicKey) => {
35
- if (!(key instanceof Uint8Array)) {
36
- throw new CodeError('"key" must be a Uint8Array', 'ERR_INVALID_RECORD_KEY_NOT_BUFFER');
37
- }
38
- if (key.byteLength < 5) {
39
- throw new CodeError('invalid public key record', 'ERR_INVALID_RECORD_KEY_TOO_SHORT');
40
- }
41
- const prefix = uint8ArrayToString(key.subarray(0, 4));
42
- if (prefix !== '/pk/') {
43
- throw new CodeError('key was not prefixed with /pk/', 'ERR_INVALID_RECORD_KEY_BAD_PREFIX');
44
- }
45
- const keyhash = key.slice(4);
46
- const publicKeyHash = await sha256.digest(publicKey);
47
- if (!uint8ArrayEquals(keyhash, publicKeyHash.bytes)) {
48
- throw new CodeError('public key does not match passed in key', 'ERR_INVALID_RECORD_HASH_MISMATCH');
49
- }
50
- };
51
- export const validators = {
52
- pk: validatePublicKeyRecord
53
- };
54
- //# sourceMappingURL=validators.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAGtE,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AACjD,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAE/D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAE,UAAsB,EAAE,MAAoB;IAC9E,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAA;IACtB,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAA;IACzC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAElC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACpB,yBAAyB;QACzB,OAAM;KACP;IAED,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;IAEjD,IAAI,SAAS,IAAI,IAAI,EAAE;QACrB,MAAM,MAAM,GAAG,wBAAwB,CAAA;QAEvC,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAA;KAC3D;IAED,MAAM,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;AACpC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,uBAAuB,GAAG,KAAK,EAAE,GAAe,EAAE,SAAqB,EAAiB,EAAE;IAC9F,IAAI,CAAC,CAAC,GAAG,YAAY,UAAU,CAAC,EAAE;QAChC,MAAM,IAAI,SAAS,CAAC,4BAA4B,EAAE,mCAAmC,CAAC,CAAA;KACvF;IAED,IAAI,GAAG,CAAC,UAAU,GAAG,CAAC,EAAE;QACtB,MAAM,IAAI,SAAS,CAAC,2BAA2B,EAAE,kCAAkC,CAAC,CAAA;KACrF;IAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAErD,IAAI,MAAM,KAAK,MAAM,EAAE;QACrB,MAAM,IAAI,SAAS,CAAC,gCAAgC,EAAE,mCAAmC,CAAC,CAAA;KAC3F;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAE5B,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAEpD,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE;QACnD,MAAM,IAAI,SAAS,CAAC,yCAAyC,EAAE,kCAAkC,CAAC,CAAA;KACnG;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAe;IACpC,EAAE,EAAE,uBAAuB;CAC5B,CAAA"}
@@ -1,11 +0,0 @@
1
- {
2
- "codec": "https://libp2p.github.io/js-libp2p-record/functions/index._internal_.Record.codec.html",
3
- "decode": "https://libp2p.github.io/js-libp2p-record/functions/index._internal_.Record.decode.html",
4
- "encode": "https://libp2p.github.io/js-libp2p-record/functions/index._internal_.Record.encode.html",
5
- "Record": "https://libp2p.github.io/js-libp2p-record/interfaces/index._internal_.Record-1.html",
6
- "Libp2pRecord": "https://libp2p.github.io/js-libp2p-record/classes/index.Libp2pRecord.html",
7
- "selectors": "https://libp2p.github.io/js-libp2p-record/variables/selectors.selectors.html",
8
- "bestRecord": "https://libp2p.github.io/js-libp2p-record/functions/selectors.bestRecord.html",
9
- "validators": "https://libp2p.github.io/js-libp2p-record/variables/validators.validators.html",
10
- "verifyRecord": "https://libp2p.github.io/js-libp2p-record/functions/validators.verifyRecord.html"
11
- }
package/src/selectors.ts DELETED
@@ -1,50 +0,0 @@
1
- import { CodeError } from '@libp2p/interfaces/errors'
2
- import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
3
- import type { Selectors } from '@libp2p/interface-dht'
4
-
5
- /**
6
- * Select the best record out of the given records
7
- */
8
- export function bestRecord (selectors: Selectors, k: Uint8Array, records: Uint8Array[]): number {
9
- if (records.length === 0) {
10
- const errMsg = 'No records given'
11
-
12
- throw new CodeError(errMsg, 'ERR_NO_RECORDS_RECEIVED')
13
- }
14
-
15
- const kStr = uint8ArrayToString(k)
16
- const parts = kStr.split('/')
17
-
18
- if (parts.length < 3) {
19
- const errMsg = 'Record key does not have a selector function'
20
-
21
- throw new CodeError(errMsg, 'ERR_NO_SELECTOR_FUNCTION_FOR_RECORD_KEY')
22
- }
23
-
24
- const selector = selectors[parts[1].toString()]
25
-
26
- if (selector == null) {
27
- const errMsg = `Unrecognized key prefix: ${parts[1]}`
28
-
29
- throw new CodeError(errMsg, 'ERR_UNRECOGNIZED_KEY_PREFIX')
30
- }
31
-
32
- if (records.length === 1) {
33
- return 0
34
- }
35
-
36
- return selector(k, records)
37
- }
38
-
39
- /**
40
- * Best record selector, for public key records.
41
- * Simply returns the first record, as all valid public key
42
- * records are equal
43
- */
44
- function publickKey (k: Uint8Array, records: Uint8Array[]): number {
45
- return 0
46
- }
47
-
48
- export const selectors: Selectors = {
49
- pk: publickKey
50
- }
package/src/validators.ts DELETED
@@ -1,69 +0,0 @@
1
- import { CodeError } from '@libp2p/interfaces/errors'
2
- import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
3
- import type { Libp2pRecord } from './index.js'
4
- import type { Validators } from '@libp2p/interface-dht'
5
- import { sha256 } from 'multiformats/hashes/sha2'
6
- import { equals as uint8ArrayEquals } from 'uint8arrays/equals'
7
-
8
- /**
9
- * Checks a record and ensures it is still valid.
10
- * It runs the needed validators.
11
- * If verification fails the returned Promise will reject with the error.
12
- */
13
- export async function verifyRecord (validators: Validators, record: Libp2pRecord): Promise<void> {
14
- const key = record.key
15
- const keyString = uint8ArrayToString(key)
16
- const parts = keyString.split('/')
17
-
18
- if (parts.length < 3) {
19
- // No validator available
20
- return
21
- }
22
-
23
- const validator = validators[parts[1].toString()]
24
-
25
- if (validator == null) {
26
- const errMsg = 'Invalid record keytype'
27
-
28
- throw new CodeError(errMsg, 'ERR_INVALID_RECORD_KEY_TYPE')
29
- }
30
-
31
- await validator(key, record.value)
32
- }
33
-
34
- /**
35
- * Validator for public key records.
36
- * Verifies that the passed in record value is the PublicKey
37
- * that matches the passed in key.
38
- * If validation fails the returned Promise will reject with the error.
39
- *
40
- * @param {Uint8Array} key - A valid key is of the form `'/pk/<keymultihash>'`
41
- * @param {Uint8Array} publicKey - The public key to validate against (protobuf encoded).
42
- */
43
- const validatePublicKeyRecord = async (key: Uint8Array, publicKey: Uint8Array): Promise<void> => {
44
- if (!(key instanceof Uint8Array)) {
45
- throw new CodeError('"key" must be a Uint8Array', 'ERR_INVALID_RECORD_KEY_NOT_BUFFER')
46
- }
47
-
48
- if (key.byteLength < 5) {
49
- throw new CodeError('invalid public key record', 'ERR_INVALID_RECORD_KEY_TOO_SHORT')
50
- }
51
-
52
- const prefix = uint8ArrayToString(key.subarray(0, 4))
53
-
54
- if (prefix !== '/pk/') {
55
- throw new CodeError('key was not prefixed with /pk/', 'ERR_INVALID_RECORD_KEY_BAD_PREFIX')
56
- }
57
-
58
- const keyhash = key.slice(4)
59
-
60
- const publicKeyHash = await sha256.digest(publicKey)
61
-
62
- if (!uint8ArrayEquals(keyhash, publicKeyHash.bytes)) {
63
- throw new CodeError('public key does not match passed in key', 'ERR_INVALID_RECORD_HASH_MISMATCH')
64
- }
65
- }
66
-
67
- export const validators: Validators = {
68
- pk: validatePublicKeyRecord
69
- }