@libp2p/ping 1.1.6-2265e59ba → 1.1.6-5214dec4a
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.min.js +1 -1
- package/dist/src/constants.d.ts +0 -1
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.js +0 -1
- package/dist/src/constants.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/ping.d.ts +1 -1
- package/dist/src/ping.d.ts.map +1 -1
- package/dist/src/ping.js +11 -11
- package/dist/src/ping.js.map +1 -1
- package/package.json +6 -6
- package/src/constants.ts +0 -2
- package/src/index.ts +1 -1
- package/src/ping.ts +11 -11
package/dist/index.min.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
(function (root, factory) {(typeof module === 'object' && module.exports) ? module.exports = factory() : root.Libp2PPing = factory()}(typeof self !== 'undefined' ? self : this, function () {
|
|
2
|
-
"use strict";var Libp2PPing=(()=>{var
|
|
2
|
+
"use strict";var Libp2PPing=(()=>{var v=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var K=Object.prototype.hasOwnProperty;var Q=(e,t)=>{for(var r in t)v(e,r,{get:t[r],enumerable:!0})},Y=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of J(t))!K.call(e,o)&&o!==r&&v(e,o,{get:()=>t[o],enumerable:!(n=H(t,o))||n.enumerable});return e};var Z=e=>Y(v({},"__esModule",{value:!0}),e);var pt={};Q(pt,{PING_PROTOCOL:()=>j,ping:()=>lt});var g=class extends Error{constructor(t="The operation was aborted"){super(t),this.name="AbortError"}};var b=class extends Error{constructor(t="Invalid parameters"){super(t),this.name="InvalidParametersError"}};var w=class extends Error{constructor(t="Invalid message"){super(t),this.name="InvalidMessageError"}},x=class extends Error{constructor(t="Protocol error"){super(t),this.name="ProtocolError"}},E=class extends Error{constructor(t="Timed out"){super(t),this.name="TimeoutError"}};function U(e,t){if(e===t)return!0;if(e.byteLength!==t.byteLength)return!1;for(let r=0;r<e.byteLength;r++)if(e[r]!==t[r])return!1;return!0}var f=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;var gt=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;var bt={}.toString;function R(e=32){if(f&&typeof f.getRandomValues=="function")return f.getRandomValues(new Uint8Array(e));if(f&&typeof f.randomBytes=="function")return f.randomBytes(e);throw new Error("crypto.getRandomValues must be defined")}function O(e){if(isNaN(e)||e<=0)throw new b("random bytes length must be a Number bigger than 0");return R(e)}function tt(e){return e[Symbol.asyncIterator]!=null}function et(e){if(tt(e))return(async()=>{for await(let t of e)return t})();for(let t of e)return t}var C=et;function L(){let e={};return e.promise=new Promise((t,r)=>{e.resolve=t,e.reject=r}),e}var I=class{buffer;mask;top;btm;next;constructor(t){if(!(t>0)||t-1&t)throw new Error("Max size for a FixedFIFO should be a power of two");this.buffer=new Array(t),this.mask=t-1,this.top=0,this.btm=0,this.next=null}push(t){return this.buffer[this.top]!==void 0?!1:(this.buffer[this.top]=t,this.top=this.top+1&this.mask,!0)}shift(){let t=this.buffer[this.btm];if(t!==void 0)return this.buffer[this.btm]=void 0,this.btm=this.btm+1&this.mask,t}isEmpty(){return this.buffer[this.btm]===void 0}},m=class{size;hwm;head;tail;constructor(t={}){this.hwm=t.splitLimit??16,this.head=new I(this.hwm),this.tail=this.head,this.size=0}calculateSize(t){return t?.byteLength!=null?t.byteLength:1}push(t){if(t?.value!=null&&(this.size+=this.calculateSize(t.value)),!this.head.push(t)){let r=this.head;this.head=r.next=new I(2*this.head.buffer.length),this.head.push(t)}}shift(){let t=this.tail.shift();if(t===void 0&&this.tail.next!=null){let r=this.tail.next;this.tail.next=null,this.tail=r,t=this.tail.shift()}return t?.value!=null&&(this.size-=this.calculateSize(t.value)),t}isEmpty(){return this.head.isEmpty()}};var P=class extends Error{type;code;constructor(t,r){super(t??"The operation was aborted"),this.type="aborted",this.code=r??"ABORT_ERR"}};function S(e={}){return rt(r=>{let n=r.shift();if(n==null)return{done:!0};if(n.error!=null)throw n.error;return{done:n.done===!0,value:n.value}},e)}function rt(e,t){t=t??{};let r=t.onEnd,n=new m,o,i,u,a=L(),c=async()=>{try{return n.isEmpty()?u?{done:!0}:await new Promise((s,p)=>{i=y=>{i=null,n.push(y);try{s(e(n))}catch(h){p(h)}return o}}):e(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=L()})}},l=s=>i!=null?i(s):(n.push(s),o),A=s=>(n=new m,i!=null?i({error:s}):(n.push({error:s}),o)),k=s=>{if(u)return o;if(t?.objectMode!==!0&&s?.byteLength==null)throw new Error("objectMode was not true but tried to push non-Uint8Array value");return l({done:!1,value:s})},_=s=>u?o:(u=!0,s!=null?A(s):l({done:!0})),$=()=>(n=new m,_(),{done:!0}),q=s=>(_(s),{done:!0});if(o={[Symbol.asyncIterator](){return this},next:c,return:$,throw:q,push:k,end:_,get readableLength(){return n.size},onEmpty:async s=>{let p=s?.signal;if(p?.throwIfAborted(),n.isEmpty())return;let y,h;p!=null&&(y=new Promise((ft,W)=>{h=()=>{W(new P)},p.addEventListener("abort",h)}));try{await Promise.race([a.promise,y])}finally{h!=null&&p!=null&&p?.removeEventListener("abort",h)}}},r==null)return o;let d=o;return o={[Symbol.asyncIterator](){return this},next(){return d.next()},throw(s){return d.throw(s),r!=null&&(r(s),r=void 0),{done:!0}},return(){return d.return(),r!=null&&(r(),r=void 0),{done:!0}},push:k,end(s){return d.end(s),r!=null&&(r(s),r=void 0),o},get readableLength(){return d.readableLength},onEmpty:s=>d.onEmpty(s)},o}function nt(e){return e[Symbol.asyncIterator]!=null}function ot(...e){let t=[];for(let r of e)nt(r)||t.push(r);return t.length===e.length?function*(){for(let r of t)yield*r}():async function*(){let r=S({objectMode:!0});Promise.resolve().then(async()=>{try{await Promise.all(e.map(async n=>{for await(let o of n)r.push(o)})),r.end()}catch(n){r.end(n)}}),yield*r}()}var B=ot;function M(e,...t){if(e==null)throw new Error("Empty pipeline");if(N(e)){let n=e;e=()=>n.source}else if(z(e)||D(e)){let n=e;e=()=>n}let r=[e,...t];if(r.length>1&&N(r[r.length-1])&&(r[r.length-1]=r[r.length-1].sink),r.length>2)for(let n=1;n<r.length-1;n++)N(r[n])&&(r[n]=it(r[n]));return st(...r)}var st=(...e)=>{let t;for(;e.length>0;)t=e.shift()(t);return t},D=e=>e?.[Symbol.asyncIterator]!=null,z=e=>e?.[Symbol.iterator]!=null,N=e=>e==null?!1:e.sink!=null&&e.source!=null,it=e=>t=>{let r=e.sink(t);if(r?.then!=null){let n=S({objectMode:!0});r.then(()=>{n.end()},u=>{n.end(u)});let o,i=e.source;if(D(i))o=async function*(){yield*i,n.end()};else if(z(i))o=function*(){yield*i,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return B(n,o())}return e.source};var j="/ipfs/ping/1.0.0";var V="1.0.0",X="ping",F="ipfs";var T=class{protocol;components;started;timeout;maxInboundStreams;maxOutboundStreams;runOnLimitedConnection;log;constructor(t,r={}){this.components=t,this.log=t.logger.forComponent("libp2p:ping"),this.started=!1,this.protocol=`/${r.protocolPrefix??F}/${X}/${V}`,this.timeout=r.timeout??1e4,this.maxInboundStreams=r.maxInboundStreams??2,this.maxOutboundStreams=r.maxOutboundStreams??1,this.runOnLimitedConnection=r.runOnLimitedConnection??!0,this.handleMessage=this.handleMessage.bind(this)}[Symbol.toStringTag]="@libp2p/ping";async start(){await this.components.registrar.handle(this.protocol,this.handleMessage,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0}async stop(){await this.components.registrar.unhandle(this.protocol),this.started=!1}isStarted(){return this.started}handleMessage(t){this.log("incoming ping from %p",t.connection.remotePeer);let{stream:r}=t,n=Date.now();AbortSignal.timeout(this.timeout).addEventListener("abort",()=>{r?.abort(new E("ping timeout"))}),M(r,async function*(i){let u=0;for await(let a of i){if(u+=a.byteLength,u>32){r?.abort(new w("Too much data received"));return}yield a}},r).catch(i=>{this.log.error("incoming ping from %p failed with error",t.connection.remotePeer,i),r?.abort(i)}).finally(()=>{let i=Date.now()-n;this.log("incoming ping from %p complete in %dms",t.connection.remotePeer,i)})}async ping(t,r={}){this.log("pinging %p",t);let n=Date.now(),o=O(32),i=await this.components.connectionManager.openConnection(t,r),u,a=()=>{};if(r.signal==null){let c=AbortSignal.timeout(this.timeout);r={...r,signal:c}}try{u=await i.newStream(this.protocol,{...r,runOnLimitedConnection:this.runOnLimitedConnection}),a=()=>{u?.abort(new g)},r.signal?.addEventListener("abort",a,{once:!0});let c=await M([o],u,async A=>C(A)),l=Date.now()-n;if(c==null)throw new x(`Did not receive a ping ack after ${l}ms`);if(!U(o,c.subarray()))throw new x(`Received wrong ping ack after ${l}ms`);return this.log("ping %p complete in %dms",i.remotePeer,l),l}catch(c){throw this.log.error("error while pinging %p",i.remotePeer,c),u?.abort(c),c}finally{r.signal?.removeEventListener("abort",a),u!=null&&await u.close()}}};function lt(e={}){return t=>new T(t,e)}return Z(pt);})();
|
|
3
3
|
/*! Bundled license information:
|
|
4
4
|
|
|
5
5
|
@noble/hashes/esm/utils.js:
|
package/dist/src/constants.d.ts
CHANGED
|
@@ -6,5 +6,4 @@ export declare const PROTOCOL_PREFIX = "ipfs";
|
|
|
6
6
|
export declare const TIMEOUT = 10000;
|
|
7
7
|
export declare const MAX_INBOUND_STREAMS = 2;
|
|
8
8
|
export declare const MAX_OUTBOUND_STREAMS = 1;
|
|
9
|
-
export declare const ERR_WRONG_PING_ACK = "ERR_WRONG_PING_ACK";
|
|
10
9
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,qBAAqB,CAAA;AAC/C,eAAO,MAAM,WAAW,KAAK,CAAA;AAC7B,eAAO,MAAM,gBAAgB,UAAU,CAAA;AACvC,eAAO,MAAM,aAAa,SAAS,CAAA;AACnC,eAAO,MAAM,eAAe,SAAS,CAAA;AACrC,eAAO,MAAM,OAAO,QAAQ,CAAA;AAQ5B,eAAO,MAAM,mBAAmB,IAAI,CAAA;AACpC,eAAO,MAAM,oBAAoB,IAAI,CAAA
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,qBAAqB,CAAA;AAC/C,eAAO,MAAM,WAAW,KAAK,CAAA;AAC7B,eAAO,MAAM,gBAAgB,UAAU,CAAA;AACvC,eAAO,MAAM,aAAa,SAAS,CAAA;AACnC,eAAO,MAAM,eAAe,SAAS,CAAA;AACrC,eAAO,MAAM,OAAO,QAAQ,CAAA;AAQ5B,eAAO,MAAM,mBAAmB,IAAI,CAAA;AACpC,eAAO,MAAM,oBAAoB,IAAI,CAAA"}
|
package/dist/src/constants.js
CHANGED
|
@@ -12,5 +12,4 @@ export const TIMEOUT = 10000;
|
|
|
12
12
|
// opening stream A even though the dialing peer is opening stream B and closing stream A).
|
|
13
13
|
export const MAX_INBOUND_STREAMS = 2;
|
|
14
14
|
export const MAX_OUTBOUND_STREAMS = 1;
|
|
15
|
-
export const ERR_WRONG_PING_ACK = 'ERR_WRONG_PING_ACK';
|
|
16
15
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,kBAAkB,CAAA;AAC/C,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAA;AAC7B,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAA;AACvC,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAA;AACnC,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAA;AACrC,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,CAAA;AAE5B,+FAA+F;AAC/F,+FAA+F;AAC/F,+FAA+F;AAC/F,yFAAyF;AACzF,yFAAyF;AACzF,2FAA2F;AAC3F,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAA;AACpC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAA
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,kBAAkB,CAAA;AAC/C,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAA;AAC7B,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAA;AACvC,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAA;AACnC,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAA;AACrC,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,CAAA;AAE5B,+FAA+F;AAC/F,+FAA+F;AAC/F,+FAA+F;AAC/F,yFAAyF;AACzF,yFAAyF;AACzF,2FAA2F;AAC3F,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAA;AACpC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAA"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -31,7 +31,7 @@ export interface PingServiceInit {
|
|
|
31
31
|
protocolPrefix?: string;
|
|
32
32
|
maxInboundStreams?: number;
|
|
33
33
|
maxOutboundStreams?: number;
|
|
34
|
-
|
|
34
|
+
runOnLimitedConnection?: boolean;
|
|
35
35
|
/**
|
|
36
36
|
* How long we should wait for a ping response
|
|
37
37
|
*/
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAC9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAExD,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CACtF;AAED,MAAM,WAAW,eAAe;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAC9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAExD,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CACtF;AAED,MAAM,WAAW,eAAe;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAEhC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,SAAS,CAAA;IACpB,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,MAAM,EAAE,eAAe,CAAA;CACxB;AAED,wBAAgB,IAAI,CAAE,IAAI,GAAE,eAAoB,GAAG,CAAC,UAAU,EAAE,qBAAqB,KAAK,WAAW,CAEpG;AAED,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA"}
|
package/dist/src/ping.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ export declare class PingService implements Startable, PingServiceInterface {
|
|
|
9
9
|
private readonly timeout;
|
|
10
10
|
private readonly maxInboundStreams;
|
|
11
11
|
private readonly maxOutboundStreams;
|
|
12
|
-
private readonly
|
|
12
|
+
private readonly runOnLimitedConnection;
|
|
13
13
|
private readonly log;
|
|
14
14
|
constructor(components: PingServiceComponents, init?: PingServiceInit);
|
|
15
15
|
readonly [Symbol.toStringTag] = "@libp2p/ping";
|
package/dist/src/ping.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ping.d.ts","sourceRoot":"","sources":["../../src/ping.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,qBAAqB,EAAE,eAAe,EAAE,WAAW,IAAI,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAC7G,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACxF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAExD,qBAAa,WAAY,YAAW,SAAS,EAAE,oBAAoB;IACjE,SAAgB,QAAQ,EAAE,MAAM,CAAA;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAuB;IAClD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAQ;IAC1C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAQ;IAC3C,OAAO,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"ping.d.ts","sourceRoot":"","sources":["../../src/ping.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,qBAAqB,EAAE,eAAe,EAAE,WAAW,IAAI,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAC7G,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACxF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAExD,qBAAa,WAAY,YAAW,SAAS,EAAE,oBAAoB;IACjE,SAAgB,QAAQ,EAAE,MAAM,CAAA;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAuB;IAClD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAQ;IAC1C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAQ;IAC3C,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAS;IAChD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;gBAEf,UAAU,EAAE,qBAAqB,EAAE,IAAI,GAAE,eAAoB;IAa1E,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,kBAAiB;IAExC,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IASvB,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;IAK5B,SAAS,IAAK,OAAO;IAIrB;;OAEG;IACH,aAAa,CAAE,IAAI,EAAE,kBAAkB,GAAG,IAAI;IAwC9C;;OAEG;IACG,IAAI,CAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,EAAE,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;CA+DjG"}
|
package/dist/src/ping.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { randomBytes } from '@libp2p/crypto';
|
|
2
|
-
import {
|
|
2
|
+
import { AbortError, InvalidMessageError, ProtocolError, TimeoutError } from '@libp2p/interface';
|
|
3
3
|
import first from 'it-first';
|
|
4
4
|
import { pipe } from 'it-pipe';
|
|
5
5
|
import { equals as uint8ArrayEquals } from 'uint8arrays/equals';
|
|
6
|
-
import { PROTOCOL_PREFIX, PROTOCOL_NAME, PING_LENGTH, PROTOCOL_VERSION, TIMEOUT, MAX_INBOUND_STREAMS, MAX_OUTBOUND_STREAMS
|
|
6
|
+
import { PROTOCOL_PREFIX, PROTOCOL_NAME, PING_LENGTH, PROTOCOL_VERSION, TIMEOUT, MAX_INBOUND_STREAMS, MAX_OUTBOUND_STREAMS } from './constants.js';
|
|
7
7
|
export class PingService {
|
|
8
8
|
protocol;
|
|
9
9
|
components;
|
|
@@ -11,7 +11,7 @@ export class PingService {
|
|
|
11
11
|
timeout;
|
|
12
12
|
maxInboundStreams;
|
|
13
13
|
maxOutboundStreams;
|
|
14
|
-
|
|
14
|
+
runOnLimitedConnection;
|
|
15
15
|
log;
|
|
16
16
|
constructor(components, init = {}) {
|
|
17
17
|
this.components = components;
|
|
@@ -21,7 +21,7 @@ export class PingService {
|
|
|
21
21
|
this.timeout = init.timeout ?? TIMEOUT;
|
|
22
22
|
this.maxInboundStreams = init.maxInboundStreams ?? MAX_INBOUND_STREAMS;
|
|
23
23
|
this.maxOutboundStreams = init.maxOutboundStreams ?? MAX_OUTBOUND_STREAMS;
|
|
24
|
-
this.
|
|
24
|
+
this.runOnLimitedConnection = init.runOnLimitedConnection ?? true;
|
|
25
25
|
this.handleMessage = this.handleMessage.bind(this);
|
|
26
26
|
}
|
|
27
27
|
[Symbol.toStringTag] = '@libp2p/ping';
|
|
@@ -29,7 +29,7 @@ export class PingService {
|
|
|
29
29
|
await this.components.registrar.handle(this.protocol, this.handleMessage, {
|
|
30
30
|
maxInboundStreams: this.maxInboundStreams,
|
|
31
31
|
maxOutboundStreams: this.maxOutboundStreams,
|
|
32
|
-
|
|
32
|
+
runOnLimitedConnection: this.runOnLimitedConnection
|
|
33
33
|
});
|
|
34
34
|
this.started = true;
|
|
35
35
|
}
|
|
@@ -49,14 +49,14 @@ export class PingService {
|
|
|
49
49
|
const start = Date.now();
|
|
50
50
|
const signal = AbortSignal.timeout(this.timeout);
|
|
51
51
|
signal.addEventListener('abort', () => {
|
|
52
|
-
stream?.abort(new
|
|
52
|
+
stream?.abort(new TimeoutError('ping timeout'));
|
|
53
53
|
});
|
|
54
54
|
void pipe(stream, async function* (source) {
|
|
55
55
|
let received = 0;
|
|
56
56
|
for await (const buf of source) {
|
|
57
57
|
received += buf.byteLength;
|
|
58
58
|
if (received > PING_LENGTH) {
|
|
59
|
-
stream?.abort(new
|
|
59
|
+
stream?.abort(new InvalidMessageError('Too much data received'));
|
|
60
60
|
return;
|
|
61
61
|
}
|
|
62
62
|
yield buf;
|
|
@@ -91,20 +91,20 @@ export class PingService {
|
|
|
91
91
|
try {
|
|
92
92
|
stream = await connection.newStream(this.protocol, {
|
|
93
93
|
...options,
|
|
94
|
-
|
|
94
|
+
runOnLimitedConnection: this.runOnLimitedConnection
|
|
95
95
|
});
|
|
96
96
|
onAbort = () => {
|
|
97
|
-
stream?.abort(new
|
|
97
|
+
stream?.abort(new AbortError());
|
|
98
98
|
};
|
|
99
99
|
// make stream abortable
|
|
100
100
|
options.signal?.addEventListener('abort', onAbort, { once: true });
|
|
101
101
|
const result = await pipe([data], stream, async (source) => first(source));
|
|
102
102
|
const ms = Date.now() - start;
|
|
103
103
|
if (result == null) {
|
|
104
|
-
throw new
|
|
104
|
+
throw new ProtocolError(`Did not receive a ping ack after ${ms}ms`);
|
|
105
105
|
}
|
|
106
106
|
if (!uint8ArrayEquals(data, result.subarray())) {
|
|
107
|
-
throw new
|
|
107
|
+
throw new ProtocolError(`Received wrong ping ack after ${ms}ms`);
|
|
108
108
|
}
|
|
109
109
|
this.log('ping %p complete in %dms', connection.remotePeer, ms);
|
|
110
110
|
return ms;
|
package/dist/src/ping.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ping.js","sourceRoot":"","sources":["../../src/ping.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ping.js","sourceRoot":"","sources":["../../src/ping.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/ping",
|
|
3
|
-
"version": "1.1.6-
|
|
3
|
+
"version": "1.1.6-5214dec4a",
|
|
4
4
|
"description": "Implementation of Ping Protocol",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"homepage": "https://github.com/libp2p/js-libp2p/tree/main/packages/protocol-ping#readme",
|
|
@@ -50,17 +50,17 @@
|
|
|
50
50
|
"doc-check": "aegir doc-check"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@libp2p/crypto": "4.1.9-
|
|
54
|
-
"@libp2p/interface": "1.7.0-
|
|
55
|
-
"@libp2p/interface-internal": "1.3.4-
|
|
53
|
+
"@libp2p/crypto": "4.1.9-5214dec4a",
|
|
54
|
+
"@libp2p/interface": "1.7.0-5214dec4a",
|
|
55
|
+
"@libp2p/interface-internal": "1.3.4-5214dec4a",
|
|
56
56
|
"@multiformats/multiaddr": "^12.2.3",
|
|
57
57
|
"it-first": "^3.0.6",
|
|
58
58
|
"it-pipe": "^3.0.1",
|
|
59
59
|
"uint8arrays": "^5.1.0"
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
|
-
"@libp2p/logger": "4.0.20-
|
|
63
|
-
"@libp2p/peer-id
|
|
62
|
+
"@libp2p/logger": "4.0.20-5214dec4a",
|
|
63
|
+
"@libp2p/peer-id": "4.2.4-5214dec4a",
|
|
64
64
|
"aegir": "^44.0.1",
|
|
65
65
|
"it-byte-stream": "^1.0.10",
|
|
66
66
|
"it-pair": "^2.0.6",
|
package/src/constants.ts
CHANGED
package/src/index.ts
CHANGED
package/src/ping.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { randomBytes } from '@libp2p/crypto'
|
|
2
|
-
import {
|
|
2
|
+
import { AbortError, InvalidMessageError, ProtocolError, TimeoutError } from '@libp2p/interface'
|
|
3
3
|
import first from 'it-first'
|
|
4
4
|
import { pipe } from 'it-pipe'
|
|
5
5
|
import { equals as uint8ArrayEquals } from 'uint8arrays/equals'
|
|
6
|
-
import { PROTOCOL_PREFIX, PROTOCOL_NAME, PING_LENGTH, PROTOCOL_VERSION, TIMEOUT, MAX_INBOUND_STREAMS, MAX_OUTBOUND_STREAMS
|
|
6
|
+
import { PROTOCOL_PREFIX, PROTOCOL_NAME, PING_LENGTH, PROTOCOL_VERSION, TIMEOUT, MAX_INBOUND_STREAMS, MAX_OUTBOUND_STREAMS } from './constants.js'
|
|
7
7
|
import type { PingServiceComponents, PingServiceInit, PingService as PingServiceInterface } from './index.js'
|
|
8
8
|
import type { AbortOptions, Logger, Stream, PeerId, Startable } from '@libp2p/interface'
|
|
9
9
|
import type { IncomingStreamData } from '@libp2p/interface-internal'
|
|
@@ -16,7 +16,7 @@ export class PingService implements Startable, PingServiceInterface {
|
|
|
16
16
|
private readonly timeout: number
|
|
17
17
|
private readonly maxInboundStreams: number
|
|
18
18
|
private readonly maxOutboundStreams: number
|
|
19
|
-
private readonly
|
|
19
|
+
private readonly runOnLimitedConnection: boolean
|
|
20
20
|
private readonly log: Logger
|
|
21
21
|
|
|
22
22
|
constructor (components: PingServiceComponents, init: PingServiceInit = {}) {
|
|
@@ -27,7 +27,7 @@ export class PingService implements Startable, PingServiceInterface {
|
|
|
27
27
|
this.timeout = init.timeout ?? TIMEOUT
|
|
28
28
|
this.maxInboundStreams = init.maxInboundStreams ?? MAX_INBOUND_STREAMS
|
|
29
29
|
this.maxOutboundStreams = init.maxOutboundStreams ?? MAX_OUTBOUND_STREAMS
|
|
30
|
-
this.
|
|
30
|
+
this.runOnLimitedConnection = init.runOnLimitedConnection ?? true
|
|
31
31
|
|
|
32
32
|
this.handleMessage = this.handleMessage.bind(this)
|
|
33
33
|
}
|
|
@@ -38,7 +38,7 @@ export class PingService implements Startable, PingServiceInterface {
|
|
|
38
38
|
await this.components.registrar.handle(this.protocol, this.handleMessage, {
|
|
39
39
|
maxInboundStreams: this.maxInboundStreams,
|
|
40
40
|
maxOutboundStreams: this.maxOutboundStreams,
|
|
41
|
-
|
|
41
|
+
runOnLimitedConnection: this.runOnLimitedConnection
|
|
42
42
|
})
|
|
43
43
|
this.started = true
|
|
44
44
|
}
|
|
@@ -63,7 +63,7 @@ export class PingService implements Startable, PingServiceInterface {
|
|
|
63
63
|
|
|
64
64
|
const signal = AbortSignal.timeout(this.timeout)
|
|
65
65
|
signal.addEventListener('abort', () => {
|
|
66
|
-
stream?.abort(new
|
|
66
|
+
stream?.abort(new TimeoutError('ping timeout'))
|
|
67
67
|
})
|
|
68
68
|
|
|
69
69
|
void pipe(
|
|
@@ -75,7 +75,7 @@ export class PingService implements Startable, PingServiceInterface {
|
|
|
75
75
|
received += buf.byteLength
|
|
76
76
|
|
|
77
77
|
if (received > PING_LENGTH) {
|
|
78
|
-
stream?.abort(new
|
|
78
|
+
stream?.abort(new InvalidMessageError('Too much data received'))
|
|
79
79
|
return
|
|
80
80
|
}
|
|
81
81
|
|
|
@@ -119,11 +119,11 @@ export class PingService implements Startable, PingServiceInterface {
|
|
|
119
119
|
try {
|
|
120
120
|
stream = await connection.newStream(this.protocol, {
|
|
121
121
|
...options,
|
|
122
|
-
|
|
122
|
+
runOnLimitedConnection: this.runOnLimitedConnection
|
|
123
123
|
})
|
|
124
124
|
|
|
125
125
|
onAbort = () => {
|
|
126
|
-
stream?.abort(new
|
|
126
|
+
stream?.abort(new AbortError())
|
|
127
127
|
}
|
|
128
128
|
|
|
129
129
|
// make stream abortable
|
|
@@ -138,11 +138,11 @@ export class PingService implements Startable, PingServiceInterface {
|
|
|
138
138
|
const ms = Date.now() - start
|
|
139
139
|
|
|
140
140
|
if (result == null) {
|
|
141
|
-
throw new
|
|
141
|
+
throw new ProtocolError(`Did not receive a ping ack after ${ms}ms`)
|
|
142
142
|
}
|
|
143
143
|
|
|
144
144
|
if (!uint8ArrayEquals(data, result.subarray())) {
|
|
145
|
-
throw new
|
|
145
|
+
throw new ProtocolError(`Received wrong ping ack after ${ms}ms`)
|
|
146
146
|
}
|
|
147
147
|
|
|
148
148
|
this.log('ping %p complete in %dms', connection.remotePeer, ms)
|