@libp2p/opentelemetry-metrics 0.0.0-abe9bd154

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.
Files changed (58) hide show
  1. package/README.md +77 -0
  2. package/dist/index.min.js +3 -0
  3. package/dist/src/counter-group.d.ts +12 -0
  4. package/dist/src/counter-group.d.ts.map +1 -0
  5. package/dist/src/counter-group.js +31 -0
  6. package/dist/src/counter-group.js.map +1 -0
  7. package/dist/src/counter.d.ts +9 -0
  8. package/dist/src/counter.d.ts.map +1 -0
  9. package/dist/src/counter.js +13 -0
  10. package/dist/src/counter.js.map +1 -0
  11. package/dist/src/histogram-group.d.ts +11 -0
  12. package/dist/src/histogram-group.d.ts.map +1 -0
  13. package/dist/src/histogram-group.js +27 -0
  14. package/dist/src/histogram-group.js.map +1 -0
  15. package/dist/src/histogram.d.ts +10 -0
  16. package/dist/src/histogram.d.ts.map +1 -0
  17. package/dist/src/histogram.js +19 -0
  18. package/dist/src/histogram.js.map +1 -0
  19. package/dist/src/index.d.ts +67 -0
  20. package/dist/src/index.d.ts.map +1 -0
  21. package/dist/src/index.js +416 -0
  22. package/dist/src/index.js.map +1 -0
  23. package/dist/src/metric-group.d.ts +14 -0
  24. package/dist/src/metric-group.d.ts.map +1 -0
  25. package/dist/src/metric-group.js +58 -0
  26. package/dist/src/metric-group.js.map +1 -0
  27. package/dist/src/metric.d.ts +13 -0
  28. package/dist/src/metric.d.ts.map +1 -0
  29. package/dist/src/metric.js +35 -0
  30. package/dist/src/metric.js.map +1 -0
  31. package/dist/src/summary-group.d.ts +12 -0
  32. package/dist/src/summary-group.d.ts.map +1 -0
  33. package/dist/src/summary-group.js +36 -0
  34. package/dist/src/summary-group.js.map +1 -0
  35. package/dist/src/summary.d.ts +10 -0
  36. package/dist/src/summary.d.ts.map +1 -0
  37. package/dist/src/summary.js +19 -0
  38. package/dist/src/summary.js.map +1 -0
  39. package/dist/src/system-metrics.browser.d.ts +2 -0
  40. package/dist/src/system-metrics.browser.d.ts.map +1 -0
  41. package/dist/src/system-metrics.browser.js +3 -0
  42. package/dist/src/system-metrics.browser.js.map +1 -0
  43. package/dist/src/system-metrics.d.ts +6 -0
  44. package/dist/src/system-metrics.d.ts.map +1 -0
  45. package/dist/src/system-metrics.js +439 -0
  46. package/dist/src/system-metrics.js.map +1 -0
  47. package/package.json +62 -0
  48. package/src/counter-group.ts +38 -0
  49. package/src/counter.ts +18 -0
  50. package/src/histogram-group.ts +34 -0
  51. package/src/histogram.ts +26 -0
  52. package/src/index.ts +557 -0
  53. package/src/metric-group.ts +69 -0
  54. package/src/metric.ts +44 -0
  55. package/src/summary-group.ts +43 -0
  56. package/src/summary.ts +26 -0
  57. package/src/system-metrics.browser.ts +3 -0
  58. package/src/system-metrics.ts +504 -0
package/README.md ADDED
@@ -0,0 +1,77 @@
1
+ # @libp2p/opentelemetry-metrics
2
+
3
+ [![libp2p.io](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](http://libp2p.io/)
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.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
+
8
+ > Opentelemetry metrics gathering for libp2p
9
+
10
+ # About
11
+
12
+ <!--
13
+
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
+ Uses [OpenTelemetry](https://opentelemetry.io/) to store metrics and method
28
+ traces in libp2p.
29
+
30
+ ## Example - Node.js
31
+
32
+ Use with [OpenTelemetry Desktop Viewer](https://github.com/CtrlSpice/otel-desktop-viewer):
33
+
34
+ ```ts
35
+ import { createLibp2p } from 'libp2p'
36
+ import { openTelemetryMetrics } from '@libp2p/opentelemetry-metrics'
37
+ import { PrometheusExporter } from '@opentelemetry/exporter-prometheus'
38
+ import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'
39
+ import { NodeSDK } from '@opentelemetry/sdk-node'
40
+
41
+ const sdk = new NodeSDK({
42
+ traceExporter: new OTLPTraceExporter({
43
+ url: 'http://127.0.0.1:4318/v1/traces'
44
+ }),
45
+ metricReader: new PrometheusExporter({
46
+ port: 9464
47
+ }),
48
+ serviceName: 'my-app'
49
+ })
50
+ sdk.start()
51
+
52
+ const node = await createLibp2p({
53
+ // ... other options
54
+ metrics: openTelemetryMetrics()
55
+ })
56
+ ```
57
+
58
+ # Install
59
+
60
+ ```console
61
+ $ npm i @libp2p/opentelemetry-metrics
62
+ ```
63
+
64
+ # API Docs
65
+
66
+ - <https://libp2p.github.io/js-libp2p/modules/_libp2p_opentelemetry_metrics.html>
67
+
68
+ # License
69
+
70
+ Licensed under either of
71
+
72
+ - Apache 2.0, ([LICENSE-APACHE](https://github.com/libp2p/js-libp2p/blob/main/packages/metrics-opentelemetry/LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)
73
+ - MIT ([LICENSE-MIT](https://github.com/libp2p/js-libp2p/blob/main/packages/metrics-opentelemetry/LICENSE-MIT) / <http://opensource.org/licenses/MIT>)
74
+
75
+ # Contribution
76
+
77
+ 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.
@@ -0,0 +1,3 @@
1
+ (function (root, factory) {(typeof module === 'object' && module.exports) ? module.exports = factory() : root.Libp2POpentelemetryMetrics = factory()}(typeof self !== 'undefined' ? self : this, function () {
2
+ "use strict";var Libp2POpentelemetryMetrics=(()=>{var Fr=Object.create;var W=Object.defineProperty;var Kr=Object.getOwnPropertyDescriptor;var $r=Object.getOwnPropertyNames;var Xr=Object.getPrototypeOf,Yr=Object.prototype.hasOwnProperty;var u=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Hr=(r,e)=>{for(var t in e)W(r,t,{get:e[t],enumerable:!0})},Lt=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of $r(e))!Yr.call(r,o)&&o!==t&&W(r,o,{get:()=>e[o],enumerable:!(n=Kr(e,o))||n.enumerable});return r};var Wr=(r,e,t)=>(t=r!=null?Fr(Xr(r)):{},Lt(e||!r||!r.__esModule?W(t,"default",{value:r,enumerable:!0}):t,r)),zr=r=>Lt(W({},"__esModule",{value:!0}),r);var qt=u(z=>{"use strict";Object.defineProperty(z,"__esModule",{value:!0});z._globalThis=void 0;z._globalThis=typeof globalThis=="object"?globalThis:typeof self=="object"?self:typeof window=="object"?window:typeof globalThis=="object"?globalThis:{}});var Bt=u(y=>{"use strict";var Qr=y&&y.__createBinding||(Object.create?function(r,e,t,n){n===void 0&&(n=t),Object.defineProperty(r,n,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,n){n===void 0&&(n=t),r[n]=e[t]}),Jr=y&&y.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&Qr(e,r,t)};Object.defineProperty(y,"__esModule",{value:!0});Jr(qt(),y)});var Xe=u(Q=>{"use strict";Object.defineProperty(Q,"__esModule",{value:!0});Q.VERSION=void 0;Q.VERSION="1.9.0"});var Ft=u(M=>{"use strict";Object.defineProperty(M,"__esModule",{value:!0});M.isCompatible=M._makeCompatibilityCheck=void 0;var Zr=Xe(),Ut=/^(\d+)\.(\d+)\.(\d+)(-(.+))?$/;function kt(r){let e=new Set([r]),t=new Set,n=r.match(Ut);if(!n)return()=>!1;let o={major:+n[1],minor:+n[2],patch:+n[3],prerelease:n[4]};if(o.prerelease!=null)return function(d){return d===r};function a(i){return t.add(i),!1}function l(i){return e.add(i),!0}return function(d){if(e.has(d))return!0;if(t.has(d))return!1;let g=d.match(Ut);if(!g)return a(d);let _={major:+g[1],minor:+g[2],patch:+g[3],prerelease:g[4]};return _.prerelease!=null||o.major!==_.major?a(d):o.major===0?o.minor===_.minor&&o.patch<=_.patch?l(d):a(d):o.minor<=_.minor?l(d):a(d)}}M._makeCompatibilityCheck=kt;M.isCompatible=kt(Zr.VERSION)});var S=u(x=>{"use strict";Object.defineProperty(x,"__esModule",{value:!0});x.unregisterGlobal=x.getGlobal=x.registerGlobal=void 0;var en=Bt(),I=Xe(),tn=Ft(),rn=I.VERSION.split(".")[0],G=Symbol.for(`opentelemetry.js.api.${rn}`),q=en._globalThis;function nn(r,e,t,n=!1){var o;let a=q[G]=(o=q[G])!==null&&o!==void 0?o:{version:I.VERSION};if(!n&&a[r]){let l=new Error(`@opentelemetry/api: Attempted duplicate registration of API: ${r}`);return t.error(l.stack||l.message),!1}if(a.version!==I.VERSION){let l=new Error(`@opentelemetry/api: Registration of version v${a.version} for ${r} does not match previously registered API v${I.VERSION}`);return t.error(l.stack||l.message),!1}return a[r]=e,t.debug(`@opentelemetry/api: Registered a global for ${r} v${I.VERSION}.`),!0}x.registerGlobal=nn;function on(r){var e,t;let n=(e=q[G])===null||e===void 0?void 0:e.version;if(!(!n||!(0,tn.isCompatible)(n)))return(t=q[G])===null||t===void 0?void 0:t[r]}x.getGlobal=on;function an(r,e){e.debug(`@opentelemetry/api: Unregistering a global for ${r} v${I.VERSION}.`);let t=q[G];t&&delete t[r]}x.unregisterGlobal=an});var Kt=u(J=>{"use strict";Object.defineProperty(J,"__esModule",{value:!0});J.DiagComponentLogger=void 0;var sn=S(),Ye=class{constructor(e){this._namespace=e.namespace||"DiagComponentLogger"}debug(...e){return B("debug",this._namespace,e)}error(...e){return B("error",this._namespace,e)}info(...e){return B("info",this._namespace,e)}warn(...e){return B("warn",this._namespace,e)}verbose(...e){return B("verbose",this._namespace,e)}};J.DiagComponentLogger=Ye;function B(r,e,t){let n=(0,sn.getGlobal)("diag");if(n)return t.unshift(e),n[r](...t)}});var Z=u(U=>{"use strict";Object.defineProperty(U,"__esModule",{value:!0});U.DiagLogLevel=void 0;var cn;(function(r){r[r.NONE=0]="NONE",r[r.ERROR=30]="ERROR",r[r.WARN=50]="WARN",r[r.INFO=60]="INFO",r[r.DEBUG=70]="DEBUG",r[r.VERBOSE=80]="VERBOSE",r[r.ALL=9999]="ALL"})(cn=U.DiagLogLevel||(U.DiagLogLevel={}))});var $t=u(ee=>{"use strict";Object.defineProperty(ee,"__esModule",{value:!0});ee.createLogLevelDiagLogger=void 0;var O=Z();function un(r,e){r<O.DiagLogLevel.NONE?r=O.DiagLogLevel.NONE:r>O.DiagLogLevel.ALL&&(r=O.DiagLogLevel.ALL),e=e||{};function t(n,o){let a=e[n];return typeof a=="function"&&r>=o?a.bind(e):function(){}}return{error:t("error",O.DiagLogLevel.ERROR),warn:t("warn",O.DiagLogLevel.WARN),info:t("info",O.DiagLogLevel.INFO),debug:t("debug",O.DiagLogLevel.DEBUG),verbose:t("verbose",O.DiagLogLevel.VERBOSE)}}ee.createLogLevelDiagLogger=un});var T=u(re=>{"use strict";Object.defineProperty(re,"__esModule",{value:!0});re.DiagAPI=void 0;var ln=Kt(),dn=$t(),Xt=Z(),te=S(),gn="diag",He=class r{constructor(){function e(o){return function(...a){let l=(0,te.getGlobal)("diag");if(l)return l[o](...a)}}let t=this,n=(o,a={logLevel:Xt.DiagLogLevel.INFO})=>{var l,i,d;if(o===t){let f=new Error("Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation");return t.error((l=f.stack)!==null&&l!==void 0?l:f.message),!1}typeof a=="number"&&(a={logLevel:a});let g=(0,te.getGlobal)("diag"),_=(0,dn.createLogLevelDiagLogger)((i=a.logLevel)!==null&&i!==void 0?i:Xt.DiagLogLevel.INFO,o);if(g&&!a.suppressOverrideMessage){let f=(d=new Error().stack)!==null&&d!==void 0?d:"<failed to generate stacktrace>";g.warn(`Current logger will be overwritten from ${f}`),_.warn(`Current logger will overwrite one already registered from ${f}`)}return(0,te.registerGlobal)("diag",_,t,!0)};t.setLogger=n,t.disable=()=>{(0,te.unregisterGlobal)(gn,t)},t.createComponentLogger=o=>new ln.DiagComponentLogger(o),t.verbose=e("verbose"),t.debug=e("debug"),t.info=e("info"),t.warn=e("warn"),t.error=e("error")}static instance(){return this._instance||(this._instance=new r),this._instance}};re.DiagAPI=He});var Yt=u(ne=>{"use strict";Object.defineProperty(ne,"__esModule",{value:!0});ne.BaggageImpl=void 0;var We=class r{constructor(e){this._entries=e?new Map(e):new Map}getEntry(e){let t=this._entries.get(e);if(t)return Object.assign({},t)}getAllEntries(){return Array.from(this._entries.entries()).map(([e,t])=>[e,t])}setEntry(e,t){let n=new r(this._entries);return n._entries.set(e,t),n}removeEntry(e){let t=new r(this._entries);return t._entries.delete(e),t}removeEntries(...e){let t=new r(this._entries);for(let n of e)t._entries.delete(n);return t}clear(){return new r}};ne.BaggageImpl=We});var Ht=u(oe=>{"use strict";Object.defineProperty(oe,"__esModule",{value:!0});oe.baggageEntryMetadataSymbol=void 0;oe.baggageEntryMetadataSymbol=Symbol("BaggageEntryMetadata")});var ze=u(C=>{"use strict";Object.defineProperty(C,"__esModule",{value:!0});C.baggageEntryMetadataFromString=C.createBaggage=void 0;var pn=T(),_n=Yt(),fn=Ht(),bn=pn.DiagAPI.instance();function mn(r={}){return new _n.BaggageImpl(new Map(Object.entries(r)))}C.createBaggage=mn;function hn(r){return typeof r!="string"&&(bn.error(`Cannot create baggage metadata from unknown type: ${typeof r}`),r=""),{__TYPE__:fn.baggageEntryMetadataSymbol,toString(){return r}}}C.baggageEntryMetadataFromString=hn});var k=u(A=>{"use strict";Object.defineProperty(A,"__esModule",{value:!0});A.ROOT_CONTEXT=A.createContextKey=void 0;function vn(r){return Symbol.for(r)}A.createContextKey=vn;var Qe=class r{constructor(e){let t=this;t._currentContext=e?new Map(e):new Map,t.getValue=n=>t._currentContext.get(n),t.setValue=(n,o)=>{let a=new r(t._currentContext);return a._currentContext.set(n,o),a},t.deleteValue=n=>{let o=new r(t._currentContext);return o._currentContext.delete(n),o}}};A.ROOT_CONTEXT=new Qe});var Wt=u(ae=>{"use strict";Object.defineProperty(ae,"__esModule",{value:!0});ae.DiagConsoleLogger=void 0;var Je=[{n:"error",c:"error"},{n:"warn",c:"warn"},{n:"info",c:"info"},{n:"debug",c:"debug"},{n:"verbose",c:"trace"}],Ze=class{constructor(){function e(t){return function(...n){if(console){let o=console[t];if(typeof o!="function"&&(o=console.log),typeof o=="function")return o.apply(console,n)}}}for(let t=0;t<Je.length;t++)this[Je[t].n]=e(Je[t].c)}};ae.DiagConsoleLogger=Ze});var et=u(c=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});c.createNoopMeter=c.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC=c.NOOP_OBSERVABLE_GAUGE_METRIC=c.NOOP_OBSERVABLE_COUNTER_METRIC=c.NOOP_UP_DOWN_COUNTER_METRIC=c.NOOP_HISTOGRAM_METRIC=c.NOOP_GAUGE_METRIC=c.NOOP_COUNTER_METRIC=c.NOOP_METER=c.NoopObservableUpDownCounterMetric=c.NoopObservableGaugeMetric=c.NoopObservableCounterMetric=c.NoopObservableMetric=c.NoopHistogramMetric=c.NoopGaugeMetric=c.NoopUpDownCounterMetric=c.NoopCounterMetric=c.NoopMetric=c.NoopMeter=void 0;var se=class{constructor(){}createGauge(e,t){return c.NOOP_GAUGE_METRIC}createHistogram(e,t){return c.NOOP_HISTOGRAM_METRIC}createCounter(e,t){return c.NOOP_COUNTER_METRIC}createUpDownCounter(e,t){return c.NOOP_UP_DOWN_COUNTER_METRIC}createObservableGauge(e,t){return c.NOOP_OBSERVABLE_GAUGE_METRIC}createObservableCounter(e,t){return c.NOOP_OBSERVABLE_COUNTER_METRIC}createObservableUpDownCounter(e,t){return c.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC}addBatchObservableCallback(e,t){}removeBatchObservableCallback(e){}};c.NoopMeter=se;var N=class{};c.NoopMetric=N;var ie=class extends N{add(e,t){}};c.NoopCounterMetric=ie;var ce=class extends N{add(e,t){}};c.NoopUpDownCounterMetric=ce;var ue=class extends N{record(e,t){}};c.NoopGaugeMetric=ue;var le=class extends N{record(e,t){}};c.NoopHistogramMetric=le;var R=class{addCallback(e){}removeCallback(e){}};c.NoopObservableMetric=R;var de=class extends R{};c.NoopObservableCounterMetric=de;var ge=class extends R{};c.NoopObservableGaugeMetric=ge;var pe=class extends R{};c.NoopObservableUpDownCounterMetric=pe;c.NOOP_METER=new se;c.NOOP_COUNTER_METRIC=new ie;c.NOOP_GAUGE_METRIC=new ue;c.NOOP_HISTOGRAM_METRIC=new le;c.NOOP_UP_DOWN_COUNTER_METRIC=new ce;c.NOOP_OBSERVABLE_COUNTER_METRIC=new de;c.NOOP_OBSERVABLE_GAUGE_METRIC=new ge;c.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC=new pe;function En(){return c.NOOP_METER}c.createNoopMeter=En});var zt=u(F=>{"use strict";Object.defineProperty(F,"__esModule",{value:!0});F.ValueType=void 0;var On;(function(r){r[r.INT=0]="INT",r[r.DOUBLE=1]="DOUBLE"})(On=F.ValueType||(F.ValueType={}))});var tt=u(w=>{"use strict";Object.defineProperty(w,"__esModule",{value:!0});w.defaultTextMapSetter=w.defaultTextMapGetter=void 0;w.defaultTextMapGetter={get(r,e){if(r!=null)return r[e]},keys(r){return r==null?[]:Object.keys(r)}};w.defaultTextMapSetter={set(r,e,t){r!=null&&(r[e]=t)}}});var Qt=u(_e=>{"use strict";Object.defineProperty(_e,"__esModule",{value:!0});_e.NoopContextManager=void 0;var xn=k(),rt=class{active(){return xn.ROOT_CONTEXT}with(e,t,n,...o){return t.call(n,...o)}bind(e,t){return t}enable(){return this}disable(){return this}};_e.NoopContextManager=rt});var K=u(fe=>{"use strict";Object.defineProperty(fe,"__esModule",{value:!0});fe.ContextAPI=void 0;var Pn=Qt(),nt=S(),Jt=T(),ot="context",yn=new Pn.NoopContextManager,at=class r{constructor(){}static getInstance(){return this._instance||(this._instance=new r),this._instance}setGlobalContextManager(e){return(0,nt.registerGlobal)(ot,e,Jt.DiagAPI.instance())}active(){return this._getContextManager().active()}with(e,t,n,...o){return this._getContextManager().with(e,t,n,...o)}bind(e,t){return this._getContextManager().bind(e,t)}_getContextManager(){return(0,nt.getGlobal)(ot)||yn}disable(){this._getContextManager().disable(),(0,nt.unregisterGlobal)(ot,Jt.DiagAPI.instance())}};fe.ContextAPI=at});var st=u($=>{"use strict";Object.defineProperty($,"__esModule",{value:!0});$.TraceFlags=void 0;var Sn;(function(r){r[r.NONE=0]="NONE",r[r.SAMPLED=1]="SAMPLED"})(Sn=$.TraceFlags||($.TraceFlags={}))});var be=u(h=>{"use strict";Object.defineProperty(h,"__esModule",{value:!0});h.INVALID_SPAN_CONTEXT=h.INVALID_TRACEID=h.INVALID_SPANID=void 0;var Tn=st();h.INVALID_SPANID="0000000000000000";h.INVALID_TRACEID="00000000000000000000000000000000";h.INVALID_SPAN_CONTEXT={traceId:h.INVALID_TRACEID,spanId:h.INVALID_SPANID,traceFlags:Tn.TraceFlags.NONE}});var he=u(me=>{"use strict";Object.defineProperty(me,"__esModule",{value:!0});me.NonRecordingSpan=void 0;var Nn=be(),it=class{constructor(e=Nn.INVALID_SPAN_CONTEXT){this._spanContext=e}spanContext(){return this._spanContext}setAttribute(e,t){return this}setAttributes(e){return this}addEvent(e,t){return this}addLink(e){return this}addLinks(e){return this}setStatus(e){return this}updateName(e){return this}end(e){}isRecording(){return!1}recordException(e,t){}};me.NonRecordingSpan=it});var lt=u(b=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});b.getSpanContext=b.setSpanContext=b.deleteSpan=b.setSpan=b.getActiveSpan=b.getSpan=void 0;var Mn=k(),In=he(),Cn=K(),ct=(0,Mn.createContextKey)("OpenTelemetry Context Key SPAN");function ut(r){return r.getValue(ct)||void 0}b.getSpan=ut;function An(){return ut(Cn.ContextAPI.getInstance().active())}b.getActiveSpan=An;function Zt(r,e){return r.setValue(ct,e)}b.setSpan=Zt;function Rn(r){return r.deleteValue(ct)}b.deleteSpan=Rn;function wn(r,e){return Zt(r,new In.NonRecordingSpan(e))}b.setSpanContext=wn;function Vn(r){var e;return(e=ut(r))===null||e===void 0?void 0:e.spanContext()}b.getSpanContext=Vn});var ve=u(v=>{"use strict";Object.defineProperty(v,"__esModule",{value:!0});v.wrapSpanContext=v.isSpanContextValid=v.isValidSpanId=v.isValidTraceId=void 0;var er=be(),Dn=he(),jn=/^([0-9a-f]{32})$/i,Ln=/^[0-9a-f]{16}$/i;function tr(r){return jn.test(r)&&r!==er.INVALID_TRACEID}v.isValidTraceId=tr;function rr(r){return Ln.test(r)&&r!==er.INVALID_SPANID}v.isValidSpanId=rr;function Gn(r){return tr(r.traceId)&&rr(r.spanId)}v.isSpanContextValid=Gn;function qn(r){return new Dn.NonRecordingSpan(r)}v.wrapSpanContext=qn});var _t=u(Ee=>{"use strict";Object.defineProperty(Ee,"__esModule",{value:!0});Ee.NoopTracer=void 0;var Bn=K(),nr=lt(),dt=he(),Un=ve(),gt=Bn.ContextAPI.getInstance(),pt=class{startSpan(e,t,n=gt.active()){if(!!t?.root)return new dt.NonRecordingSpan;let a=n&&(0,nr.getSpanContext)(n);return kn(a)&&(0,Un.isSpanContextValid)(a)?new dt.NonRecordingSpan(a):new dt.NonRecordingSpan}startActiveSpan(e,t,n,o){let a,l,i;if(arguments.length<2)return;arguments.length===2?i=t:arguments.length===3?(a=t,i=n):(a=t,l=n,i=o);let d=l??gt.active(),g=this.startSpan(e,a,d),_=(0,nr.setSpan)(d,g);return gt.with(_,i,void 0,g)}};Ee.NoopTracer=pt;function kn(r){return typeof r=="object"&&typeof r.spanId=="string"&&typeof r.traceId=="string"&&typeof r.traceFlags=="number"}});var bt=u(Oe=>{"use strict";Object.defineProperty(Oe,"__esModule",{value:!0});Oe.ProxyTracer=void 0;var Fn=_t(),Kn=new Fn.NoopTracer,ft=class{constructor(e,t,n,o){this._provider=e,this.name=t,this.version=n,this.options=o}startSpan(e,t,n){return this._getTracer().startSpan(e,t,n)}startActiveSpan(e,t,n,o){let a=this._getTracer();return Reflect.apply(a.startActiveSpan,a,arguments)}_getTracer(){if(this._delegate)return this._delegate;let e=this._provider.getDelegateTracer(this.name,this.version,this.options);return e?(this._delegate=e,this._delegate):Kn}};Oe.ProxyTracer=ft});var or=u(xe=>{"use strict";Object.defineProperty(xe,"__esModule",{value:!0});xe.NoopTracerProvider=void 0;var $n=_t(),mt=class{getTracer(e,t,n){return new $n.NoopTracer}};xe.NoopTracerProvider=mt});var vt=u(Pe=>{"use strict";Object.defineProperty(Pe,"__esModule",{value:!0});Pe.ProxyTracerProvider=void 0;var Xn=bt(),Yn=or(),Hn=new Yn.NoopTracerProvider,ht=class{getTracer(e,t,n){var o;return(o=this.getDelegateTracer(e,t,n))!==null&&o!==void 0?o:new Xn.ProxyTracer(this,e,t,n)}getDelegate(){var e;return(e=this._delegate)!==null&&e!==void 0?e:Hn}setDelegate(e){this._delegate=e}getDelegateTracer(e,t,n){var o;return(o=this._delegate)===null||o===void 0?void 0:o.getTracer(e,t,n)}};Pe.ProxyTracerProvider=ht});var ar=u(X=>{"use strict";Object.defineProperty(X,"__esModule",{value:!0});X.SamplingDecision=void 0;var Wn;(function(r){r[r.NOT_RECORD=0]="NOT_RECORD",r[r.RECORD=1]="RECORD",r[r.RECORD_AND_SAMPLED=2]="RECORD_AND_SAMPLED"})(Wn=X.SamplingDecision||(X.SamplingDecision={}))});var sr=u(Y=>{"use strict";Object.defineProperty(Y,"__esModule",{value:!0});Y.SpanKind=void 0;var zn;(function(r){r[r.INTERNAL=0]="INTERNAL",r[r.SERVER=1]="SERVER",r[r.CLIENT=2]="CLIENT",r[r.PRODUCER=3]="PRODUCER",r[r.CONSUMER=4]="CONSUMER"})(zn=Y.SpanKind||(Y.SpanKind={}))});var ir=u(H=>{"use strict";Object.defineProperty(H,"__esModule",{value:!0});H.SpanStatusCode=void 0;var Qn;(function(r){r[r.UNSET=0]="UNSET",r[r.OK=1]="OK",r[r.ERROR=2]="ERROR"})(Qn=H.SpanStatusCode||(H.SpanStatusCode={}))});var cr=u(V=>{"use strict";Object.defineProperty(V,"__esModule",{value:!0});V.validateValue=V.validateKey=void 0;var Et="[_0-9a-z-*/]",Jn=`[a-z]${Et}{0,255}`,Zn=`[a-z0-9]${Et}{0,240}@[a-z]${Et}{0,13}`,eo=new RegExp(`^(?:${Jn}|${Zn})$`),to=/^[ -~]{0,255}[!-~]$/,ro=/,|=/;function no(r){return eo.test(r)}V.validateKey=no;function oo(r){return to.test(r)&&!ro.test(r)}V.validateValue=oo});var pr=u(ye=>{"use strict";Object.defineProperty(ye,"__esModule",{value:!0});ye.TraceStateImpl=void 0;var ur=cr(),lr=32,ao=512,dr=",",gr="=",Ot=class r{constructor(e){this._internalState=new Map,e&&this._parse(e)}set(e,t){let n=this._clone();return n._internalState.has(e)&&n._internalState.delete(e),n._internalState.set(e,t),n}unset(e){let t=this._clone();return t._internalState.delete(e),t}get(e){return this._internalState.get(e)}serialize(){return this._keys().reduce((e,t)=>(e.push(t+gr+this.get(t)),e),[]).join(dr)}_parse(e){e.length>ao||(this._internalState=e.split(dr).reverse().reduce((t,n)=>{let o=n.trim(),a=o.indexOf(gr);if(a!==-1){let l=o.slice(0,a),i=o.slice(a+1,n.length);(0,ur.validateKey)(l)&&(0,ur.validateValue)(i)&&t.set(l,i)}return t},new Map),this._internalState.size>lr&&(this._internalState=new Map(Array.from(this._internalState.entries()).reverse().slice(0,lr))))}_keys(){return Array.from(this._internalState.keys()).reverse()}_clone(){let e=new r;return e._internalState=new Map(this._internalState),e}};ye.TraceStateImpl=Ot});var _r=u(Se=>{"use strict";Object.defineProperty(Se,"__esModule",{value:!0});Se.createTraceState=void 0;var so=pr();function io(r){return new so.TraceStateImpl(r)}Se.createTraceState=io});var fr=u(Te=>{"use strict";Object.defineProperty(Te,"__esModule",{value:!0});Te.context=void 0;var co=K();Te.context=co.ContextAPI.getInstance()});var br=u(Ne=>{"use strict";Object.defineProperty(Ne,"__esModule",{value:!0});Ne.diag=void 0;var uo=T();Ne.diag=uo.DiagAPI.instance()});var mr=u(D=>{"use strict";Object.defineProperty(D,"__esModule",{value:!0});D.NOOP_METER_PROVIDER=D.NoopMeterProvider=void 0;var lo=et(),Me=class{getMeter(e,t,n){return lo.NOOP_METER}};D.NoopMeterProvider=Me;D.NOOP_METER_PROVIDER=new Me});var vr=u(Ie=>{"use strict";Object.defineProperty(Ie,"__esModule",{value:!0});Ie.MetricsAPI=void 0;var go=mr(),xt=S(),hr=T(),Pt="metrics",yt=class r{constructor(){}static getInstance(){return this._instance||(this._instance=new r),this._instance}setGlobalMeterProvider(e){return(0,xt.registerGlobal)(Pt,e,hr.DiagAPI.instance())}getMeterProvider(){return(0,xt.getGlobal)(Pt)||go.NOOP_METER_PROVIDER}getMeter(e,t,n){return this.getMeterProvider().getMeter(e,t,n)}disable(){(0,xt.unregisterGlobal)(Pt,hr.DiagAPI.instance())}};Ie.MetricsAPI=yt});var Er=u(Ce=>{"use strict";Object.defineProperty(Ce,"__esModule",{value:!0});Ce.metrics=void 0;var po=vr();Ce.metrics=po.MetricsAPI.getInstance()});var Or=u(Ae=>{"use strict";Object.defineProperty(Ae,"__esModule",{value:!0});Ae.NoopTextMapPropagator=void 0;var St=class{inject(e,t){}extract(e,t){return e}fields(){return[]}};Ae.NoopTextMapPropagator=St});var Pr=u(E=>{"use strict";Object.defineProperty(E,"__esModule",{value:!0});E.deleteBaggage=E.setBaggage=E.getActiveBaggage=E.getBaggage=void 0;var _o=K(),fo=k(),Tt=(0,fo.createContextKey)("OpenTelemetry Baggage Key");function xr(r){return r.getValue(Tt)||void 0}E.getBaggage=xr;function bo(){return xr(_o.ContextAPI.getInstance().active())}E.getActiveBaggage=bo;function mo(r,e){return r.setValue(Tt,e)}E.setBaggage=mo;function ho(r){return r.deleteValue(Tt)}E.deleteBaggage=ho});var Tr=u(we=>{"use strict";Object.defineProperty(we,"__esModule",{value:!0});we.PropagationAPI=void 0;var Nt=S(),vo=Or(),yr=tt(),Re=Pr(),Eo=ze(),Sr=T(),Mt="propagation",Oo=new vo.NoopTextMapPropagator,It=class r{constructor(){this.createBaggage=Eo.createBaggage,this.getBaggage=Re.getBaggage,this.getActiveBaggage=Re.getActiveBaggage,this.setBaggage=Re.setBaggage,this.deleteBaggage=Re.deleteBaggage}static getInstance(){return this._instance||(this._instance=new r),this._instance}setGlobalPropagator(e){return(0,Nt.registerGlobal)(Mt,e,Sr.DiagAPI.instance())}inject(e,t,n=yr.defaultTextMapSetter){return this._getGlobalPropagator().inject(e,t,n)}extract(e,t,n=yr.defaultTextMapGetter){return this._getGlobalPropagator().extract(e,t,n)}fields(){return this._getGlobalPropagator().fields()}disable(){(0,Nt.unregisterGlobal)(Mt,Sr.DiagAPI.instance())}_getGlobalPropagator(){return(0,Nt.getGlobal)(Mt)||Oo}};we.PropagationAPI=It});var Nr=u(Ve=>{"use strict";Object.defineProperty(Ve,"__esModule",{value:!0});Ve.propagation=void 0;var xo=Tr();Ve.propagation=xo.PropagationAPI.getInstance()});var Ar=u(De=>{"use strict";Object.defineProperty(De,"__esModule",{value:!0});De.TraceAPI=void 0;var Ct=S(),Mr=vt(),Ir=ve(),j=lt(),Cr=T(),At="trace",Rt=class r{constructor(){this._proxyTracerProvider=new Mr.ProxyTracerProvider,this.wrapSpanContext=Ir.wrapSpanContext,this.isSpanContextValid=Ir.isSpanContextValid,this.deleteSpan=j.deleteSpan,this.getSpan=j.getSpan,this.getActiveSpan=j.getActiveSpan,this.getSpanContext=j.getSpanContext,this.setSpan=j.setSpan,this.setSpanContext=j.setSpanContext}static getInstance(){return this._instance||(this._instance=new r),this._instance}setGlobalTracerProvider(e){let t=(0,Ct.registerGlobal)(At,this._proxyTracerProvider,Cr.DiagAPI.instance());return t&&this._proxyTracerProvider.setDelegate(e),t}getTracerProvider(){return(0,Ct.getGlobal)(At)||this._proxyTracerProvider}getTracer(e,t){return this.getTracerProvider().getTracer(e,t)}disable(){(0,Ct.unregisterGlobal)(At,Cr.DiagAPI.instance()),this._proxyTracerProvider=new Mr.ProxyTracerProvider}};De.TraceAPI=Rt});var Rr=u(je=>{"use strict";Object.defineProperty(je,"__esModule",{value:!0});je.trace=void 0;var Po=Ar();je.trace=Po.TraceAPI.getInstance()});var Br=u(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0});s.trace=s.propagation=s.metrics=s.diag=s.context=s.INVALID_SPAN_CONTEXT=s.INVALID_TRACEID=s.INVALID_SPANID=s.isValidSpanId=s.isValidTraceId=s.isSpanContextValid=s.createTraceState=s.TraceFlags=s.SpanStatusCode=s.SpanKind=s.SamplingDecision=s.ProxyTracerProvider=s.ProxyTracer=s.defaultTextMapSetter=s.defaultTextMapGetter=s.ValueType=s.createNoopMeter=s.DiagLogLevel=s.DiagConsoleLogger=s.ROOT_CONTEXT=s.createContextKey=s.baggageEntryMetadataFromString=void 0;var yo=ze();Object.defineProperty(s,"baggageEntryMetadataFromString",{enumerable:!0,get:function(){return yo.baggageEntryMetadataFromString}});var wr=k();Object.defineProperty(s,"createContextKey",{enumerable:!0,get:function(){return wr.createContextKey}});Object.defineProperty(s,"ROOT_CONTEXT",{enumerable:!0,get:function(){return wr.ROOT_CONTEXT}});var So=Wt();Object.defineProperty(s,"DiagConsoleLogger",{enumerable:!0,get:function(){return So.DiagConsoleLogger}});var To=Z();Object.defineProperty(s,"DiagLogLevel",{enumerable:!0,get:function(){return To.DiagLogLevel}});var No=et();Object.defineProperty(s,"createNoopMeter",{enumerable:!0,get:function(){return No.createNoopMeter}});var Mo=zt();Object.defineProperty(s,"ValueType",{enumerable:!0,get:function(){return Mo.ValueType}});var Vr=tt();Object.defineProperty(s,"defaultTextMapGetter",{enumerable:!0,get:function(){return Vr.defaultTextMapGetter}});Object.defineProperty(s,"defaultTextMapSetter",{enumerable:!0,get:function(){return Vr.defaultTextMapSetter}});var Io=bt();Object.defineProperty(s,"ProxyTracer",{enumerable:!0,get:function(){return Io.ProxyTracer}});var Co=vt();Object.defineProperty(s,"ProxyTracerProvider",{enumerable:!0,get:function(){return Co.ProxyTracerProvider}});var Ao=ar();Object.defineProperty(s,"SamplingDecision",{enumerable:!0,get:function(){return Ao.SamplingDecision}});var Ro=sr();Object.defineProperty(s,"SpanKind",{enumerable:!0,get:function(){return Ro.SpanKind}});var wo=ir();Object.defineProperty(s,"SpanStatusCode",{enumerable:!0,get:function(){return wo.SpanStatusCode}});var Vo=st();Object.defineProperty(s,"TraceFlags",{enumerable:!0,get:function(){return Vo.TraceFlags}});var Do=_r();Object.defineProperty(s,"createTraceState",{enumerable:!0,get:function(){return Do.createTraceState}});var wt=ve();Object.defineProperty(s,"isSpanContextValid",{enumerable:!0,get:function(){return wt.isSpanContextValid}});Object.defineProperty(s,"isValidTraceId",{enumerable:!0,get:function(){return wt.isValidTraceId}});Object.defineProperty(s,"isValidSpanId",{enumerable:!0,get:function(){return wt.isValidSpanId}});var Vt=be();Object.defineProperty(s,"INVALID_SPANID",{enumerable:!0,get:function(){return Vt.INVALID_SPANID}});Object.defineProperty(s,"INVALID_TRACEID",{enumerable:!0,get:function(){return Vt.INVALID_TRACEID}});Object.defineProperty(s,"INVALID_SPAN_CONTEXT",{enumerable:!0,get:function(){return Vt.INVALID_SPAN_CONTEXT}});var Dr=fr();Object.defineProperty(s,"context",{enumerable:!0,get:function(){return Dr.context}});var jr=br();Object.defineProperty(s,"diag",{enumerable:!0,get:function(){return jr.diag}});var Lr=Er();Object.defineProperty(s,"metrics",{enumerable:!0,get:function(){return Lr.metrics}});var Gr=Nr();Object.defineProperty(s,"propagation",{enumerable:!0,get:function(){return Gr.propagation}});var qr=Rr();Object.defineProperty(s,"trace",{enumerable:!0,get:function(){return qr.trace}});s.default={context:Dr.context,diag:jr.diag,metrics:Lr.metrics,propagation:Gr.propagation,trace:qr.trace}});var Xo={};Hr(Xo,{openTelemetryMetrics:()=>qo});var m=class extends Error{static name="InvalidParametersError";constructor(e="Invalid parameters"){super(e),this.name="InvalidParametersError"}};var Gt=Symbol.for("@libp2p/service-capabilities"),Wo=Symbol.for("@libp2p/service-dependencies");var p=Wr(Br(),1);function jo(r){let[e,t]=r[Symbol.asyncIterator]!=null?[r[Symbol.asyncIterator](),Symbol.asyncIterator]:[r[Symbol.iterator](),Symbol.iterator],n=[];return{peek:()=>e.next(),push:o=>{n.push(o)},next:()=>n.length>0?{done:!1,value:n.shift()}:e.next(),[t](){return this}}}var Ur=jo;function Lo(r){return r[Symbol.asyncIterator]!=null}function kr(r){return r?.then!=null}function Go(r,e){let t=0;if(Lo(r))return async function*(){for await(let d of r){let g=e(d,t++);kr(g)&&await g,yield d}}();let n=Ur(r),{value:o,done:a}=n.next();if(a===!0)return function*(){}();if(typeof e(o,t++)?.then=="function")return async function*(){yield o;for await(let d of n){let g=e(d,t++);kr(g)&&await g,yield d}}();let i=e;return function*(){yield o;for(let d of n)i(d,t++),yield d}()}var Dt=Go;var Le=class{label;counter;constructor(e,t){this.label=e,this.counter=t}update(e){Object.entries(e).forEach(([t,n])=>{this.counter.add(n,{[this.label]:t})})}increment(e){Object.entries(e).forEach(([t,n])=>{this.counter.add(n===!0?1:n,{[this.label]:t})})}reset(){}timer(e){return()=>{}}};var Ge=class{counter;constructor(e){this.counter=e}increment(e){this.counter.add(e??1)}reset(){}};var qe=class{label;histogram;constructor(e,t){this.label=e,this.histogram=t}observe(e){Object.entries(e).forEach(([t,n])=>{this.histogram.record(n,{[this.label]:t})})}reset(){this.histogram.record(0)}timer(e){let t=Date.now();return()=>{this.histogram.record(Date.now()-t,{[this.label]:e})}}};var Be=class{histogram;constructor(e){this.histogram=e}observe(e){this.histogram.record(e)}reset(){this.histogram.record(0)}timer(){let e=Date.now();return()=>{this.observe(Date.now()-e)}}};var Ue=class{label;gauge;lastValues;constructor(e,t){this.label=e,this.gauge=t,this.lastValues={}}update(e){Object.entries(e).forEach(([t,n])=>{this.lastValues[t]=n,this.gauge.record(n,{[this.label]:t})})}increment(e){Object.entries(e).forEach(([t,n])=>{this.lastValues[t]==null&&(this.lastValues[t]=0),this.lastValues[t]+=n===!0?1:n,this.gauge.record(this.lastValues[t],{[this.label]:t})})}decrement(e){Object.entries(e).forEach(([t,n])=>{this.lastValues[t]==null&&(this.lastValues[t]=0),this.lastValues[t]-=n===!0?1:n,this.gauge.record(this.lastValues[t],{[this.label]:t})})}reset(){Object.keys(this.lastValues).forEach(e=>{this.lastValues[e]=0,this.gauge.record(0,{[this.label]:e})})}timer(e){let t=Date.now();return()=>{this.lastValues[e]=Date.now()-t,this.gauge.record(this.lastValues[e],{[this.label]:e})}}};var ke=class{gauge;lastValue;constructor(e){this.gauge=e,this.lastValue=0,this.update(0)}update(e){this.lastValue=e,this.gauge.record(e,{attrName:"attrValue"})}increment(e=1){this.lastValue+=e,this.gauge.record(this.lastValue)}decrement(e=1){this.lastValue-=e,this.gauge.record(this.lastValue)}reset(){this.gauge.record(0),this.lastValue=0}timer(){let e=Date.now();return()=>{this.lastValue=Date.now()-e,this.gauge.record(this.lastValue)}}};var Fe=class{label;gauge;lastValues;constructor(e,t){this.label=e,this.gauge=t,this.lastValues={}}observe(e){Object.entries(e).forEach(([t,n])=>{this.lastValues[t]=n,this.gauge.record(n,{[this.label]:t})})}reset(){Object.keys(this.lastValues).forEach(e=>{this.lastValues[e]=0,this.gauge.record(0,{[this.label]:e})})}timer(e){let t=Date.now();return()=>{this.lastValues[e]=Date.now()-t,this.gauge.record(this.lastValues[e],{[this.label]:e})}}};var Ke=class{gauge;constructor(e){this.gauge=e}observe(e){this.gauge.record(e)}reset(){this.gauge.record(0)}timer(){let e=Date.now();return()=>{this.observe(Date.now()-e)}}};var jt=class{transferStats;tracer;meterName;constructor(e,t){this.tracer=p.trace.getTracer(t?.appName??e.nodeInfo.name,t?.appVersion??e.nodeInfo.version),this.transferStats=new Map,this.meterName=t?.meterName??e.nodeInfo.name,this.registerCounterGroup("libp2p_data_transfer_bytes_total",{label:"protocol",calculate:()=>{let n={};for(let[o,a]of this.transferStats.entries())n[o]=a;return this.transferStats=new Map,n}})}[Symbol.toStringTag]="@libp2p/metrics-opentelemetry";[Gt]=["@libp2p/metrics"];_incrementValue(e,t){let n=this.transferStats.get(e)??0;this.transferStats.set(e,n+t)}_track(e,t){let n=this,o=e.sink;e.sink=async function(i){await o(Dt(i,d=>{n._incrementValue(`${t} sent`,d.byteLength)}))};let a=e.source;e.source=Dt(a,l=>{n._incrementValue(`${t} received`,l.byteLength)})}trackMultiaddrConnection(e){this._track(e,"global")}trackProtocolStream(e,t){e.protocol!=null&&this._track(e,e.protocol)}registerMetric(e,t={}){if(e==null||e.trim()==="")throw new m("Metric name is required");let n=p.metrics.getMeterProvider().getMeter(this.meterName);if(P(t)){let o=t.calculate;n.createObservableGauge(e,{description:t?.help??e}).addCallback(async l=>{l.observe(await o())});return}return new ke(n.createGauge(e,{description:t?.help??e}))}registerMetricGroup(e,t={}){if(e==null||e.trim()==="")throw new m("Metric name is required");let n=p.metrics.getMeterProvider().getMeter(this.meterName),o=t?.label??e;if(P(t)){let a=t.calculate;n.createObservableGauge(e,{description:t?.help??e}).addCallback(async i=>{let d=await a();for(let[g,_]of Object.entries(d))i.observe(_,{[o]:g})});return}return new Ue(o,n.createGauge(e,{description:t?.help??e}))}registerCounter(e,t={}){if(e==null||e.trim()==="")throw new m("Metric name is required");let n=p.metrics.getMeterProvider().getMeter(this.meterName);if(P(t)){let o=t.calculate;n.createObservableCounter(e,{description:t?.help??e}).addCallback(async l=>{l.observe(await o())});return}return new Ge(n.createCounter(e,{description:t?.help??e}))}registerCounterGroup(e,t={}){if(e==null||e.trim()==="")throw new m("Metric name is required");let n=p.metrics.getMeterProvider().getMeter(this.meterName),o=t?.label??e;if(P(t)){let a={},l=t.calculate;n.createObservableGauge(e,{description:t?.help??e}).addCallback(async d=>{let g=await l();for(let[_,f]of Object.entries(g))a[_]==null&&(a[_]=0),a[_]+=f,d.observe(a[_],{[o]:_})});return}return new Le(o,n.createCounter(e,{description:t?.help??e}))}registerHistogram(e,t={}){if(e==null||e.trim()==="")throw new m("Metric name is required");let n=p.metrics.getMeterProvider().getMeter(this.meterName);if(!P(t))return new Be(n.createHistogram(e,{advice:{explicitBucketBoundaries:t.buckets},description:t?.help??e}))}registerHistogramGroup(e,t={}){if(e==null||e.trim()==="")throw new m("Metric name is required");let n=p.metrics.getMeterProvider().getMeter(this.meterName),o=t?.label??e;if(!P(t))return new qe(o,n.createHistogram(e,{advice:{explicitBucketBoundaries:t.buckets},description:t?.help??e}))}registerSummary(e,t={}){if(e==null||e.trim()==="")throw new m("Metric name is required");let n=p.metrics.getMeterProvider().getMeter(this.meterName);if(!P(t))return new Ke(n.createGauge(e,{description:t?.help??e}))}registerSummaryGroup(e,t={}){if(e==null||e.trim()==="")throw new m("Metric name is required");let n=p.metrics.getMeterProvider().getMeter(this.meterName),o=t?.label??e;if(!P(t))return new Fe(o,n.createGauge(e,{description:t?.help??e}))}createTrace(){return p.context.active()}traceFunction(e,t,n){return(...o)=>{let a=n?.optionsIndex??0,l={...o[a]??{}};if(o[a]=l,l.trace==null)return t.apply(null,o);let i={},d=l.trace,g=this.tracer.startSpan(e,{attributes:n?.getAttributesFromArgs?.(o,i)},d),_=p.trace.setSpan(d,g);l.trace=_;let f;try{f=p.context.with(_,t,void 0,...o)}catch($e){throw g.recordException($e),g.setStatus({code:p.SpanStatusCode.ERROR,message:$e.toString()}),g.end(),$e}return Bo(f)?Uo(f,g,i,n):ko(f)?Fo(f,g,i,n):Ko(f)?$o(f,g,i,n):(L(g,n?.getAttributesFromReturnValue?.(f,i)),g.setStatus({code:p.SpanStatusCode.OK}),g.end(),f)}}};function qo(r={}){return e=>new jt(e,r)}function Bo(r){return typeof r?.then=="function"}async function Uo(r,e,t,n){return r.then(o=>(L(e,n?.getAttributesFromReturnValue?.(o,t)),e.setStatus({code:p.SpanStatusCode.OK}),o)).catch(o=>{e.recordException(o),e.setStatus({code:p.SpanStatusCode.ERROR,message:o.toString()})}).finally(()=>{e.end()})}function ko(r){return r?.[Symbol.iterator]!=null}function Fo(r,e,t,n){let o=r[Symbol.iterator](),a=0,l={next:()=>{try{let i=o.next();return i.done===!0?(L(e,n?.getAttributesFromReturnValue?.(i.value,t)),e.setStatus({code:p.SpanStatusCode.OK}),e.end()):L(e,n?.getAttributesFromYieldedValue?.(i.value,t,++a)),i}catch(i){throw e.recordException(i),e.setStatus({code:p.SpanStatusCode.ERROR,message:i.toString()}),e.end(),i}},return:i=>o.return(i),throw:i=>o.throw(i),[Symbol.iterator]:()=>l};return l}function Ko(r){return r?.[Symbol.asyncIterator]!=null}function $o(r,e,t,n){let o=r[Symbol.asyncIterator](),a=0,l={next:async()=>{try{let i=await o.next();return i.done===!0?(L(e,n?.getAttributesFromReturnValue?.(i.value,t)),e.setStatus({code:p.SpanStatusCode.OK}),e.end()):L(e,n?.getAttributesFromYieldedValue?.(i.value,t,++a)),i}catch(i){throw e.recordException(i),e.setStatus({code:p.SpanStatusCode.ERROR,message:i.toString()}),e.end(),i}},return:async i=>o.return(i),throw:async i=>o.throw(i),[Symbol.asyncIterator]:()=>l};return l}function P(r){return r?.calculate!=null}function L(r,e){e!=null&&r.setAttributes(e)}return zr(Xo);})();
3
+ return Libp2POpentelemetryMetrics}));
@@ -0,0 +1,12 @@
1
+ import type { CounterGroup, StopTimer } from '@libp2p/interface';
2
+ import type { UpDownCounter as OTelCounter } from '@opentelemetry/api';
3
+ export declare class OpenTelemetryCounterGroup implements CounterGroup {
4
+ private readonly label;
5
+ private readonly counter;
6
+ constructor(label: string, counter: OTelCounter);
7
+ update(values: Record<string, number>): void;
8
+ increment(values: Record<string, number | true>): void;
9
+ reset(): void;
10
+ timer(key: string): StopTimer;
11
+ }
12
+ //# sourceMappingURL=counter-group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"counter-group.d.ts","sourceRoot":"","sources":["../../src/counter-group.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAChE,OAAO,KAAK,EAAE,aAAa,IAAI,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEtE,qBAAa,yBAA0B,YAAW,YAAY;IAC5D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;gBAExB,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW;IAKhD,MAAM,CAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAQ7C,SAAS,CAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI;IAQvD,KAAK,IAAK,IAAI;IAId,KAAK,CAAE,GAAG,EAAE,MAAM,GAAG,SAAS;CAK/B"}
@@ -0,0 +1,31 @@
1
+ export class OpenTelemetryCounterGroup {
2
+ label;
3
+ counter;
4
+ constructor(label, counter) {
5
+ this.label = label;
6
+ this.counter = counter;
7
+ }
8
+ update(values) {
9
+ Object.entries(values).forEach(([key, value]) => {
10
+ this.counter.add(value, {
11
+ [this.label]: key
12
+ });
13
+ });
14
+ }
15
+ increment(values) {
16
+ Object.entries(values).forEach(([key, value]) => {
17
+ this.counter.add(value === true ? 1 : value, {
18
+ [this.label]: key
19
+ });
20
+ });
21
+ }
22
+ reset() {
23
+ // no-op
24
+ }
25
+ timer(key) {
26
+ return () => {
27
+ // no-op
28
+ };
29
+ }
30
+ }
31
+ //# sourceMappingURL=counter-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"counter-group.js","sourceRoot":"","sources":["../../src/counter-group.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,yBAAyB;IACnB,KAAK,CAAQ;IACb,OAAO,CAAa;IAErC,YAAa,KAAa,EAAE,OAAoB;QAC9C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,MAAM,CAAE,MAA8B;QACpC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAC9C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE;gBACtB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG;aAClB,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,SAAS,CAAE,MAAqC;QAC9C,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAC9C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;gBAC3C,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG;aAClB,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK;QACH,QAAQ;IACV,CAAC;IAED,KAAK,CAAE,GAAW;QAChB,OAAO,GAAG,EAAE;YACV,QAAQ;QACV,CAAC,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import type { Counter } from '@libp2p/interface';
2
+ import type { Counter as OTelCounter } from '@opentelemetry/api';
3
+ export declare class OpenTelemetryCounter implements Counter {
4
+ private readonly counter;
5
+ constructor(counter: OTelCounter);
6
+ increment(value?: number): void;
7
+ reset(): void;
8
+ }
9
+ //# sourceMappingURL=counter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"counter.d.ts","sourceRoot":"","sources":["../../src/counter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEhE,qBAAa,oBAAqB,YAAW,OAAO;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;gBAExB,OAAO,EAAE,WAAW;IAIjC,SAAS,CAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAIhC,KAAK,IAAK,IAAI;CAGf"}
@@ -0,0 +1,13 @@
1
+ export class OpenTelemetryCounter {
2
+ counter;
3
+ constructor(counter) {
4
+ this.counter = counter;
5
+ }
6
+ increment(value) {
7
+ this.counter.add(value ?? 1);
8
+ }
9
+ reset() {
10
+ // no-op
11
+ }
12
+ }
13
+ //# sourceMappingURL=counter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"counter.js","sourceRoot":"","sources":["../../src/counter.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,oBAAoB;IACd,OAAO,CAAa;IAErC,YAAa,OAAoB;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,SAAS,CAAE,KAAc;QACvB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAA;IAC9B,CAAC;IAED,KAAK;QACH,QAAQ;IACV,CAAC;CACF"}
@@ -0,0 +1,11 @@
1
+ import type { HistogramGroup, StopTimer } from '@libp2p/interface';
2
+ import type { Histogram as OTelHistogram } from '@opentelemetry/api';
3
+ export declare class OpenTelemetryHistogramGroup implements HistogramGroup {
4
+ private readonly label;
5
+ private readonly histogram;
6
+ constructor(label: string, histogram: OTelHistogram);
7
+ observe(values: Record<string, number>): void;
8
+ reset(): void;
9
+ timer(key: string): StopTimer;
10
+ }
11
+ //# sourceMappingURL=histogram-group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"histogram-group.d.ts","sourceRoot":"","sources":["../../src/histogram-group.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAClE,OAAO,KAAK,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEpE,qBAAa,2BAA4B,YAAW,cAAc;IAChE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;gBAE5B,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa;IAKpD,OAAO,CAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAQ9C,KAAK,IAAK,IAAI;IAId,KAAK,CAAE,GAAG,EAAE,MAAM,GAAG,SAAS;CAS/B"}
@@ -0,0 +1,27 @@
1
+ export class OpenTelemetryHistogramGroup {
2
+ label;
3
+ histogram;
4
+ constructor(label, histogram) {
5
+ this.label = label;
6
+ this.histogram = histogram;
7
+ }
8
+ observe(values) {
9
+ Object.entries(values).forEach(([key, value]) => {
10
+ this.histogram.record(value, {
11
+ [this.label]: key
12
+ });
13
+ });
14
+ }
15
+ reset() {
16
+ this.histogram.record(0);
17
+ }
18
+ timer(key) {
19
+ const start = Date.now();
20
+ return () => {
21
+ this.histogram.record(Date.now() - start, {
22
+ [this.label]: key
23
+ });
24
+ };
25
+ }
26
+ }
27
+ //# sourceMappingURL=histogram-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"histogram-group.js","sourceRoot":"","sources":["../../src/histogram-group.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,2BAA2B;IACrB,KAAK,CAAQ;IACb,SAAS,CAAe;IAEzC,YAAa,KAAa,EAAE,SAAwB;QAClD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAED,OAAO,CAAE,MAA8B;QACrC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAC9C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE;gBAC3B,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG;aAClB,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAC1B,CAAC;IAED,KAAK,CAAE,GAAW;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAExB,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE;gBACxC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG;aAClB,CAAC,CAAA;QACJ,CAAC,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import type { Histogram, StopTimer } from '@libp2p/interface';
2
+ import type { Histogram as OTelHistogram } from '@opentelemetry/api';
3
+ export declare class OpenTelemetryHistogram implements Histogram {
4
+ private readonly histogram;
5
+ constructor(histogram: OTelHistogram);
6
+ observe(value: number): void;
7
+ reset(): void;
8
+ timer(): StopTimer;
9
+ }
10
+ //# sourceMappingURL=histogram.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"histogram.d.ts","sourceRoot":"","sources":["../../src/histogram.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,KAAK,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEpE,qBAAa,sBAAuB,YAAW,SAAS;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;gBAE5B,SAAS,EAAE,aAAa;IAIrC,OAAO,CAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAI7B,KAAK,IAAK,IAAI;IAId,KAAK,IAAK,SAAS;CAOpB"}
@@ -0,0 +1,19 @@
1
+ export class OpenTelemetryHistogram {
2
+ histogram;
3
+ constructor(histogram) {
4
+ this.histogram = histogram;
5
+ }
6
+ observe(value) {
7
+ this.histogram.record(value);
8
+ }
9
+ reset() {
10
+ this.histogram.record(0);
11
+ }
12
+ timer() {
13
+ const start = Date.now();
14
+ return () => {
15
+ this.observe(Date.now() - start);
16
+ };
17
+ }
18
+ }
19
+ //# sourceMappingURL=histogram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"histogram.js","sourceRoot":"","sources":["../../src/histogram.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,sBAAsB;IAChB,SAAS,CAAe;IAEzC,YAAa,SAAwB;QACnC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAED,OAAO,CAAE,KAAa;QACpB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC9B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAC1B,CAAC;IAED,KAAK;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAExB,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAA;QAClC,CAAC,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * @packageDocumentation
3
+ *
4
+ * Uses [OpenTelemetry](https://opentelemetry.io/) to store metrics and method
5
+ * traces in libp2p.
6
+ *
7
+ * @example Node.js
8
+ *
9
+ * Use with [OpenTelemetry Desktop Viewer](https://github.com/CtrlSpice/otel-desktop-viewer):
10
+ *
11
+ * ```ts
12
+ * import { createLibp2p } from 'libp2p'
13
+ * import { openTelemetryMetrics } from '@libp2p/opentelemetry-metrics'
14
+ * import { PrometheusExporter } from '@opentelemetry/exporter-prometheus'
15
+ * import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'
16
+ * import { NodeSDK } from '@opentelemetry/sdk-node'
17
+ *
18
+ * const sdk = new NodeSDK({
19
+ * traceExporter: new OTLPTraceExporter({
20
+ * url: 'http://127.0.0.1:4318/v1/traces'
21
+ * }),
22
+ * metricReader: new PrometheusExporter({
23
+ * port: 9464
24
+ * }),
25
+ * serviceName: 'my-app'
26
+ * })
27
+ * sdk.start()
28
+ *
29
+ * const node = await createLibp2p({
30
+ * // ... other options
31
+ * metrics: openTelemetryMetrics()
32
+ * })
33
+ * ```
34
+ */
35
+ import type { Metrics, NodeInfo } from '@libp2p/interface';
36
+ export interface OpenTelemetryComponents {
37
+ nodeInfo: NodeInfo;
38
+ }
39
+ export interface OpenTelemetryMetricsInit {
40
+ /**
41
+ * The app name used to create the tracer
42
+ *
43
+ * @default 'js-libp2p'
44
+ */
45
+ appName?: string;
46
+ /**
47
+ * The app version used to create the tracer.
48
+ *
49
+ * The version number of the running version of libp2p is used as the default.
50
+ */
51
+ appVersion?: string;
52
+ /**
53
+ * On Node.js platforms the current filesystem usage is reported as the metric
54
+ * `nodejs_fs_usage_bytes` using the `statfs` function from `node:fs` - the
55
+ * default location to stat is the current working directory, configured this
56
+ * location here
57
+ */
58
+ statfsLocation?: string;
59
+ /**
60
+ * The meter name used for creating metrics
61
+ *
62
+ * @default 'js-libp2p'
63
+ */
64
+ meterName?: string;
65
+ }
66
+ export declare function openTelemetryMetrics(init?: OpenTelemetryMetricsInit): (components: OpenTelemetryComponents) => Metrics;
67
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAcH,OAAO,KAAK,EAAgE,OAAO,EAA2M,QAAQ,EAAwE,MAAM,mBAAmB,CAAA;AAMvY,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,QAAQ,CAAA;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AA8VD,wBAAgB,oBAAoB,CAAE,IAAI,GAAE,wBAA6B,GAAG,CAAC,UAAU,EAAE,uBAAuB,KAAK,OAAO,CAE3H"}