{"_id":"diodejs","_rev":"28-532db0b8e2ef5d462dc6d30a9a6c3d17","name":"diodejs","dist-tags":{"latest":"0.5.10"},"versions":{"0.0.3":{"name":"diodejs","version":"0.0.3","author":"","license":"ISC","_id":"diodejs@0.0.3","maintainers":[{"name":"deratech","email":"omer@derateknoloji.com"}],"dist":{"shasum":"4abc718058948f529c1bdd1dd87986e536c97fc4","tarball":"https://registry.npmjs.org/diodejs/-/diodejs-0.0.3.tgz","fileCount":15,"integrity":"sha512-MYk4+LbkAkcFBDV6y4REqP6XXvi9lS7Aze8xYJu6jGXoW1eMOHYkcpk4j/kF/6+Ti4X1t0jO9dyMoNdDMEwv+w==","signatures":[{"sig":"MEUCIDcJDUA/VyzeUG+tLji4UfUE5JGyAHGrcvj9+WD509IvAiEAwqKvCLHOcGmsc7Y9qmS2budDaaNHf7DQzKj4JaxjkOM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":85399},"main":"index.js","gitHead":"bb2162e5dbc879609923242aa278466b5b77647a","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"deratech","email":"omer@derateknoloji.com"},"_npmVersion":"10.8.2","description":"A JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.","directories":{},"_nodeVersion":"20.17.0","dependencies":{"fs":"^0.0.1-security","net":"^1.0.2","rlp":"^3.0.0","tls":"^0.0.1","axios":"^1.6.8","dgram":"^1.0.1","buffer":"^6.0.3","crypto":"^1.0.1","ethers":"^6.13.2","asn1.js":"^5.4.1","secp256k1":"^5.0.0","node-fetch":"^2.7.0","ethereumjs-abi":"^0.6.8","@ethereumjs/rlp":"^5.0.2","ethereumjs-util":"^7.1.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/diodejs_0.0.3_1727384950363_0.3319250121038373","host":"s3://npm-registry-packages"}},"0.0.4":{"name":"diodejs","version":"0.0.4","author":"","license":"ISC","_id":"diodejs@0.0.4","maintainers":[{"name":"deratech","email":"omer@derateknoloji.com"}],"dist":{"shasum":"2605e9cd9c12eee5176a5c1097055daa2185bc6c","tarball":"https://registry.npmjs.org/diodejs/-/diodejs-0.0.4.tgz","fileCount":15,"integrity":"sha512-iXnw9Svnj8Xm0+EEQKUF+cGu+2PVVkEGoh4joH78UXpbniGTSfqjbsRdu7K/J2/y28Hrzst72vCaT3FnGg6VFg==","signatures":[{"sig":"MEUCIFtUxcznB1nsBxaLwU4eClOceLpMnX+yb3weuC1dL7BvAiEApz0/RGLXT/oANIHUbH8Y91PRJ5VY+PPSSkbRX5zz6j0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":86742},"main":"index.js","gitHead":"661df8eb9011b22bff67245d3408eb7708dd55ca","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"deratech","email":"omer@derateknoloji.com"},"_npmVersion":"10.8.2","description":"A JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.","directories":{},"_nodeVersion":"20.18.2","dependencies":{"fs":"^0.0.1-security","net":"^1.0.2","rlp":"^3.0.0","tls":"^0.0.1","axios":"^1.6.8","dgram":"^1.0.1","buffer":"^6.0.3","crypto":"^1.0.1","ethers":"^6.13.2","asn1.js":"^5.4.1","secp256k1":"^5.0.0","node-fetch":"^2.7.0","ethereumjs-abi":"^0.6.8","@ethereumjs/rlp":"^5.0.2","ethereumjs-util":"^7.1.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/diodejs_0.0.4_1740507309088_0.3416350564836239","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"diodejs","version":"0.0.5","author":"","license":"ISC","_id":"diodejs@0.0.5","maintainers":[{"name":"deratech","email":"omer@derateknoloji.com"}],"dist":{"shasum":"ad817e3de8555b30528fc90c0482377aca535b79","tarball":"https://registry.npmjs.org/diodejs/-/diodejs-0.0.5.tgz","fileCount":16,"integrity":"sha512-uq6WTyzsEBvthcl/nakEHoLk6O+HxKWHs10uf+EkovQXzk36srunjko4O5vVINPvkBiCVUIzRS59PPY5xFZiYw==","signatures":[{"sig":"MEUCICRGNS855vH8l6is1SG5lNUr9shxlKfkPuscfEwVmCClAiEA897OS7YhahqdpvRj0UCEbTK2ocUtzay3zElbilxvaQQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":93204},"main":"index.js","gitHead":"e39c6e040c48ebd730a682ec594f4bf29349374a","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"deratech","email":"omer@derateknoloji.com"},"_npmVersion":"10.8.2","description":"A JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.","directories":{},"_nodeVersion":"20.18.3","dependencies":{"fs":"^0.0.1-security","net":"^1.0.2","rlp":"^3.0.0","tls":"^0.0.1","dgram":"^1.0.1","buffer":"^6.0.3","crypto":"^1.0.1","dotenv":"^16.4.7","ethers":"^6.13.2","asn1.js":"^5.4.1","jsrsasign":"^11.1.0","secp256k1":"^5.0.1","node-fetch":"^2.7.0","dera-logger":"^2.0.0","ethereumjs-abi":"^0.6.8","@ethereumjs/rlp":"^5.0.2","ethereumjs-util":"^7.1.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/diodejs_0.0.5_1741187663043_0.29386992008129065","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"diodejs","version":"0.1.0","author":"","license":"ISC","_id":"diodejs@0.1.0","maintainers":[{"name":"deratech","email":"omer@derateknoloji.com"}],"dist":{"shasum":"c082c031000bd591724001a3cb04947f1c394f8b","tarball":"https://registry.npmjs.org/diodejs/-/diodejs-0.1.0.tgz","fileCount":17,"integrity":"sha512-IDyVtu+QrDZbqToy/MHfwddz/1AROAacDi1A+iXpyzrduL1O6XSb9EkIUN5hA6cuvLcAcv7XwbQnfNLCqw8h9A==","signatures":[{"sig":"MEUCIQCAjsyCgrUdMP1Yfoem/1CZntRAeChXbc0+I9Z7evNqdQIgMUkz1r0Fi4vQR/kSVmRO47I3plJY6u/fCigrtYMGwyE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":95509},"main":"index.js","gitHead":"b94e3f39e5fd2d9e3b9ec2704c8061b3efb4eb10","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"deratech","email":"omer@derateknoloji.com"},"_npmVersion":"10.8.2","description":"A JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.","directories":{},"_nodeVersion":"20.18.3","dependencies":{"fs":"^0.0.1-security","net":"^1.0.2","rlp":"^3.0.0","tls":"^0.0.1","dgram":"^1.0.1","buffer":"^6.0.3","crypto":"^1.0.1","dotenv":"^16.4.7","ethers":"^6.13.2","asn1.js":"^5.4.1","jsrsasign":"^11.1.0","secp256k1":"^5.0.1","node-fetch":"^2.7.0","dera-logger":"^2.0.0","ethereumjs-abi":"^0.6.8","@ethereumjs/rlp":"^5.0.2","ethereumjs-util":"^7.1.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/diodejs_0.1.0_1741355077518_0.5757254038786233","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"diodejs","version":"0.1.1","author":"","license":"ISC","_id":"diodejs@0.1.1","maintainers":[{"name":"deratech","email":"omer@derateknoloji.com"}],"dist":{"shasum":"c77e2bfc29862836244306e70be7a8418e6f6b16","tarball":"https://registry.npmjs.org/diodejs/-/diodejs-0.1.1.tgz","fileCount":17,"integrity":"sha512-YKDb3NlBG0K41hW75VzbWsG+ZMkz2vqlS5Cm4Kml6nPlRkY7v2UH0mm0/eE4tTZKrns2Z6omSILF3X99dy23Gw==","signatures":[{"sig":"MEUCIFw8w9jT06gwsgX7l90q0tAR69JOXsX585dIZVIS3YDtAiEAxakxiB5d0k1G35Pq5Nw4BnF93BZWZYVjjnHcuxaeMwE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97569},"main":"index.js","gitHead":"8c8905fa7f79522c5457db564c2c8281e9defd5a","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"deratech","email":"omer@derateknoloji.com"},"_npmVersion":"10.8.2","description":"A JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.","directories":{},"_nodeVersion":"20.18.3","dependencies":{"fs":"^0.0.1-security","net":"^1.0.2","rlp":"^3.0.0","tls":"^0.0.1","dgram":"^1.0.1","buffer":"^6.0.3","crypto":"^1.0.1","dotenv":"^16.4.7","ethers":"^6.13.2","asn1.js":"^5.4.1","jsrsasign":"^11.1.0","secp256k1":"^5.0.1","node-fetch":"^2.7.0","dera-logger":"^2.0.0","ethereumjs-abi":"^0.6.8","@ethereumjs/rlp":"^5.0.2","ethereumjs-util":"^7.1.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/diodejs_0.1.1_1741371085355_0.5176844374981089","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"diodejs","version":"0.1.3","author":"","license":"ISC","_id":"diodejs@0.1.3","maintainers":[{"name":"deratech","email":"omer@derateknoloji.com"}],"dist":{"shasum":"a6526cb728c488d76e75af4dee01f9f457ab21bc","tarball":"https://registry.npmjs.org/diodejs/-/diodejs-0.1.3.tgz","fileCount":17,"integrity":"sha512-WX6rO+Msg1lT+n0InNHL0En4+S4zs44dBB5pyYuWIkBTazM/s9vlNuqsue+ybD0zeR8sc1qN4ct/efSsbxeG2w==","signatures":[{"sig":"MEUCIHypuVZrQkbm5ffUD30OTmxoEMxjDKBAEkbFBDPQ9CY4AiEAsIqiIZDicJ7t8SPuWdIZCGSErgTxkEPTvRBJojVSqUU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":102393},"main":"index.js","gitHead":"abceee483a567ad2bcad8048d94e56dd9464f5ae","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"deratech","email":"omer@derateknoloji.com"},"_npmVersion":"10.8.2","description":"A JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.","directories":{},"_nodeVersion":"20.18.3","dependencies":{"fs":"^0.0.1-security","net":"^1.0.2","rlp":"^3.0.0","tls":"^0.0.1","dgram":"^1.0.1","buffer":"^6.0.3","crypto":"^1.0.1","dotenv":"^16.4.7","ethers":"^6.13.2","asn1.js":"^5.4.1","jsrsasign":"^11.1.0","secp256k1":"^5.0.1","node-fetch":"^2.7.0","dera-logger":"^2.0.0","ethereumjs-abi":"^0.6.8","@ethereumjs/rlp":"^5.0.2","ethereumjs-util":"^7.1.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/diodejs_0.1.3_1741388339438_0.1038998990704898","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"diodejs","version":"0.1.4","author":"","license":"ISC","_id":"diodejs@0.1.4","maintainers":[{"name":"deratech","email":"omer@derateknoloji.com"}],"dist":{"shasum":"a3e3f7da769ec6b5bd65628f332565b7c447ac7a","tarball":"https://registry.npmjs.org/diodejs/-/diodejs-0.1.4.tgz","fileCount":17,"integrity":"sha512-iuz3QDQpN6f0rdWcBMDcktFO8QJxqBU29xm+kX2+Gj3ywqQW0H7xN/ImM4qu7XZAWsKuoYL4gH/6jFW8ma+h2g==","signatures":[{"sig":"MEYCIQC0SSE27jh2EV7Ju/cs/vKQCnqUKVs/JRKUF4Rrl31onwIhAIEkQSK3xhv4M5emWgFCBOVj/wa9oJge0RQqngmTIsG3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":102288},"main":"index.js","gitHead":"13e14f4f7eb62143a477631f02a75308bdacdcf3","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"deratech","email":"omer@derateknoloji.com"},"_npmVersion":"10.8.2","description":"A JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.","directories":{},"_nodeVersion":"20.18.3","dependencies":{"fs":"^0.0.1-security","net":"^1.0.2","rlp":"^3.0.0","tls":"^0.0.1","dgram":"^1.0.1","buffer":"^6.0.3","crypto":"^1.0.1","dotenv":"^16.4.7","ethers":"^6.13.2","asn1.js":"^5.4.1","jsrsasign":"^11.1.0","secp256k1":"^5.0.1","node-fetch":"^2.7.0","dera-logger":"^2.0.0","ethereumjs-abi":"^0.6.8","@ethereumjs/rlp":"^5.0.2","ethereumjs-util":"^7.1.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/diodejs_0.1.4_1741392388188_0.896150732110194","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"diodejs","version":"0.1.5","author":"","license":"ISC","_id":"diodejs@0.1.5","maintainers":[{"name":"deratech","email":"omer@derateknoloji.com"}],"dist":{"shasum":"9b71521960f307f6d60af58db362708c414edea9","tarball":"https://registry.npmjs.org/diodejs/-/diodejs-0.1.5.tgz","fileCount":17,"integrity":"sha512-DfpJ6OyYFIO3UWX2JQCfbf+UxiW+J4M0FYos228yJcxpcUCGqEzbwRiKRMESuSO8gvyCKhdPk6v6EHtlIDK7ow==","signatures":[{"sig":"MEUCIQD0SjRFsfAnKI8VFygMabg+TzeFWhXtwqVBFFWSaIZb3AIgKUBkBdemC92+vYabkKPXWWCxj7u2+kHJkqrTBs2n6bg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":103121},"main":"index.js","gitHead":"db360814ee40e3f3ab454ff8079036239fb2734c","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"deratech","email":"omer@derateknoloji.com"},"_npmVersion":"10.8.2","description":"A JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.","directories":{},"_nodeVersion":"20.18.3","dependencies":{"fs":"^0.0.1-security","net":"^1.0.2","rlp":"^3.0.0","tls":"^0.0.1","dgram":"^1.0.1","buffer":"^6.0.3","crypto":"^1.0.1","dotenv":"^16.4.7","ethers":"^6.13.2","asn1.js":"^5.4.1","jsrsasign":"^11.1.0","secp256k1":"^5.0.1","node-fetch":"^2.7.0","dera-logger":"^2.0.0","ethereumjs-abi":"^0.6.8","@ethereumjs/rlp":"^5.0.2","ethereumjs-util":"^7.1.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/diodejs_0.1.5_1741471047942_0.6392323320400461","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"diodejs","version":"0.1.6","author":"","license":"ISC","_id":"diodejs@0.1.6","maintainers":[{"name":"deratech","email":"omer@derateknoloji.com"}],"dist":{"shasum":"9ac533a11aeccc7f50f508fa55a2bd07e15c8626","tarball":"https://registry.npmjs.org/diodejs/-/diodejs-0.1.6.tgz","fileCount":17,"integrity":"sha512-JuPlEmqe2JgdgJw6PcpRLCSTLzxVEjYtdDQSVZIVTHpS0j5OOd3/ls0m/lIu2zWvkwcdn25cI4XDzpbDeffr7Q==","signatures":[{"sig":"MEQCIHk2bPl+LRbKVN1/GTsCIz9jY1IfBE92JBolHlKDkc3YAiAuwyVR5GxlYWAvtwrcMkMbWRJQHrqFo5lBUUEQzqhOww==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110112},"main":"index.js","gitHead":"d479143bc96011ada52bbc1f1ffef5284f1feac2","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"deratech","email":"omer@derateknoloji.com"},"_npmVersion":"10.8.2","description":"A JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.","directories":{},"_nodeVersion":"20.18.3","dependencies":{"fs":"^0.0.1-security","net":"^1.0.2","rlp":"^3.0.0","tls":"^0.0.1","dgram":"^1.0.1","buffer":"^6.0.3","crypto":"^1.0.1","dotenv":"^16.4.7","ethers":"^6.13.2","asn1.js":"^5.4.1","jsrsasign":"^11.1.0","secp256k1":"^5.0.1","node-fetch":"^2.7.0","dera-logger":"^2.0.0","ethereumjs-abi":"^0.6.8","@ethereumjs/rlp":"^5.0.2","ethereumjs-util":"^7.1.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/diodejs_0.1.6_1741626554713_0.7895671116220617","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"diodejs","version":"0.2.0","author":"","license":"ISC","_id":"diodejs@0.2.0","maintainers":[{"name":"deratech","email":"omer@derateknoloji.com"}],"dist":{"shasum":"f435c03327e700109319d42aaf98c55d7f1b5b3a","tarball":"https://registry.npmjs.org/diodejs/-/diodejs-0.2.0.tgz","fileCount":17,"integrity":"sha512-a/VvzpiO03lXzo74GgOwzvOrKTI4XbUZAlO//HIe/6FelHV5Nkr00uoyyHs7NwwnLIWy0QDi5XsnGfjreziSCA==","signatures":[{"sig":"MEUCIQDu046QNytSJkhN+4w9lq5gWFTeU48Vh1K37zJc/UCbPAIgMhBm6PfRIxXkCCDKHH/IaI7V0ca8rNaCI5eRjVn+VNY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":116727},"main":"index.js","gitHead":"691ceb0bbe77b080a7a00c6718f0e465e35418a5","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"deratech","email":"omer@derateknoloji.com"},"_npmVersion":"10.8.2","description":"A JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.","directories":{},"_nodeVersion":"20.18.3","dependencies":{"fs":"^0.0.1-security","net":"^1.0.2","rlp":"^3.0.0","tls":"^0.0.1","dgram":"^1.0.1","buffer":"^6.0.3","crypto":"^1.0.1","dotenv":"^16.4.7","ethers":"^6.13.2","asn1.js":"^5.4.1","jsrsasign":"^11.1.0","secp256k1":"^5.0.1","node-fetch":"^2.7.0","dera-logger":"^2.0.0","ethereumjs-abi":"^0.6.8","@ethereumjs/rlp":"^5.0.2","ethereumjs-util":"^7.1.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/diodejs_0.2.0_1742157201041_0.08350589371812744","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"diodejs","version":"0.2.1","author":"","license":"ISC","_id":"diodejs@0.2.1","maintainers":[{"name":"deratech","email":"omer@derateknoloji.com"}],"dist":{"shasum":"82e89bffca87cac7263fb4e0a3d92db86d285811","tarball":"https://registry.npmjs.org/diodejs/-/diodejs-0.2.1.tgz","fileCount":17,"integrity":"sha512-65tiGt5OkdMFt5BvkEudmjhadtU3QsR8NLaEi9x6YTJcUDbLjjMxrR8U0W4Eqr8eWZrbtt1ydutAwnXgrG20gQ==","signatures":[{"sig":"MEYCIQDHxke78a1r5f1sWMvoe5XTHOn+tRUd+qc5q5i+0IKxGAIhAMZajOl/FhmnIAcB6JtddEO3JT1MsA1umM/uWF1++iiu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":121051},"main":"index.js","gitHead":"2d13e170e0ea2095b2abb2e244853e2ab52f020a","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"deratech","email":"omer@derateknoloji.com"},"_npmVersion":"10.8.2","description":"A JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.","directories":{},"_nodeVersion":"20.19.0","dependencies":{"fs":"^0.0.1-security","net":"^1.0.2","rlp":"^3.0.0","tls":"^0.0.1","dgram":"^1.0.1","buffer":"^6.0.3","crypto":"^1.0.1","dotenv":"^16.4.7","ethers":"^6.13.2","asn1.js":"^5.4.1","jsrsasign":"^11.1.0","secp256k1":"^5.0.1","node-fetch":"^2.7.0","dera-logger":"^2.0.0","ethereumjs-abi":"^0.6.8","@ethereumjs/rlp":"^5.0.2","ethereumjs-util":"^7.1.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/diodejs_0.2.1_1744509172464_0.9715300110013811","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"diodejs","version":"0.2.2","author":"","license":"ISC","_id":"diodejs@0.2.2","maintainers":[{"name":"deratech","email":"omer@derateknoloji.com"}],"dist":{"shasum":"ab8c14d813736741eefa8b754cc5d65c89e01816","tarball":"https://registry.npmjs.org/diodejs/-/diodejs-0.2.2.tgz","fileCount":17,"integrity":"sha512-TZqcM60baTiJuyou/ZRV1S/iN7saRD6KADOtoCDqJ+8NwdNuAdys3Le+ZxW/QSGj+MPLn+rTqJuTH0v/Ailapg==","signatures":[{"sig":"MEQCIExaBwui84DNwTm2sB3u+N2N74yLtkjjuvWil4WIXbF9AiBcXOigPwh4IvyQHxEDG4/f45YtUIJnk9mggUBM9nsf6Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":121939},"main":"index.js","gitHead":"14f8ac0579633304789aff1cb21d6a0afacb427e","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"deratech","email":"omer@derateknoloji.com"},"_npmVersion":"10.8.2","description":"A JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.","directories":{},"_nodeVersion":"20.19.0","dependencies":{"fs":"^0.0.1-security","net":"^1.0.2","rlp":"^3.0.0","tls":"^0.0.1","dgram":"^1.0.1","buffer":"^6.0.3","crypto":"^1.0.1","dotenv":"^16.4.7","ethers":"^6.13.2","asn1.js":"^5.4.1","jsrsasign":"^11.1.0","secp256k1":"^5.0.1","node-fetch":"^2.7.0","dera-logger":"^2.0.0","ethereumjs-abi":"^0.6.8","@ethereumjs/rlp":"^5.0.2","ethereumjs-util":"^7.1.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/diodejs_0.2.2_1744515938094_0.2981323252867225","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"diodejs","version":"0.3.0","author":"","license":"ISC","_id":"diodejs@0.3.0","maintainers":[{"name":"deratech","email":"omer@derateknoloji.com"}],"dist":{"shasum":"bc9e46d19093b49a64ee737db1e14627423d6dca","tarball":"https://registry.npmjs.org/diodejs/-/diodejs-0.3.0.tgz","fileCount":17,"integrity":"sha512-xCKbpdgB6Tjt41xxY0bpYfstNseaAZx9ePpJTqtkHwE4WS5kaO06XUz9KZeh6vFZfV+Oz4iOWlDkFDaXfeZJ5A==","signatures":[{"sig":"MEYCIQCHa3MQPtnx5EE8dZn+ABydqfMKE9mb6xq0Hv4mpo21uAIhAOWe2sMj3an4LtOCBTmth0HCQ+tAk0lm4vYt7XKaYJq5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":124965},"main":"index.js","engines":{"node":">=18"},"gitHead":"107db75212c25bc560914b2fbffed42625bae497","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"deratech","email":"omer@derateknoloji.com"},"_npmVersion":"10.8.2","description":"A JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"rlp":"^3.0.0","dotenv":"^16.4.7","ethers":"^6.13.2","keccak":"^3.0.4","asn1.js":"^5.4.1","jsrsasign":"^11.1.0","secp256k1":"^5.0.1","node-fetch":"^2.7.0","dera-logger":"^2.0.0","ethereumjs-abi":"^0.6.8","@ethereumjs/rlp":"^5.0.2","ethereumjs-util":"^7.1.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/diodejs_0.3.0_1757067011214_0.17935623391809563","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"diodejs","version":"0.4.0","author":"","license":"ISC","_id":"diodejs@0.4.0","maintainers":[{"name":"deratech","email":"omer@derateknoloji.com"}],"dist":{"shasum":"814d66154c2d8b96d9b261c12d7df1ff0a16aa15","tarball":"https://registry.npmjs.org/diodejs/-/diodejs-0.4.0.tgz","fileCount":23,"integrity":"sha512-5xBtyZpnsfUqeTrIOWUfBhn0OR1qQNw7Dro4PFwxoOmWvG5eSq8mygIGAbYWZbTAmAv4SXXGYzbKis9RyWPg5w==","signatures":[{"sig":"MEQCIAmmRodU9i/2iO64/cjlXMRZHwJjypPbsmQ1R968yRQMAiAZW69SAoLDzxAWnARIFL9mKMzRcyNSpbpbv+UuveEHCg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":192668},"main":"index.js","engines":{"node":">=18"},"gitHead":"ea9fd2761dcb5caaeb87fa4eaeb27f3332f0cc82","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"deratech","email":"omer@derateknoloji.com"},"_npmVersion":"10.8.2","description":"A JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"rlp":"^3.0.0","dotenv":"^16.4.7","ethers":"^6.13.2","keccak":"^3.0.4","asn1.js":"^5.4.1","jsrsasign":"^11.1.0","secp256k1":"^5.0.1","node-fetch":"^2.7.0","dera-logger":"^2.0.0","ethereumjs-abi":"^0.6.8","@ethereumjs/rlp":"^5.0.2","ethereumjs-util":"^7.1.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/diodejs_0.4.0_1770208632738_0.24384143454033502","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"diodejs","version":"0.4.1","author":"","license":"ISC","_id":"diodejs@0.4.1","maintainers":[{"name":"deratech","email":"omer@derateknoloji.com"}],"dist":{"shasum":"797c63b8d978b08c691a3252aa41d0ce837e0c99","tarball":"https://registry.npmjs.org/diodejs/-/diodejs-0.4.1.tgz","fileCount":27,"integrity":"sha512-6q3DhytljZcVPGDbmZ9kTvR5WPZkjDGLEOsuECXLHikPRTCi+awi+uNK36OEufrN2KkzpXcqwtMrdXm16g3dHA==","signatures":[{"sig":"MEUCIF7+Ixb2m+AvLmGPUiQOi//hvLiLWpUAYInZoU3qGkuRAiEAsrC7LoC0SbOMKgpeA52hAbaudMyO8pMdzlk7i5xjjsw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":327890},"main":"index.js","engines":{"node":">=18"},"gitHead":"bcea60d5fa87a9d75bb2ce261e65bd4d25635938","scripts":{"test":"node --test"},"_npmUser":{"name":"deratech","email":"omer@derateknoloji.com"},"_npmVersion":"10.8.2","description":"A JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.","directories":{},"_nodeVersion":"20.20.1","dependencies":{"ws":"^8.19.0","rlp":"^3.0.0","dotenv":"^16.4.7","ethers":"^6.13.2","keccak":"^3.0.4","asn1.js":"^5.4.1","jsrsasign":"^11.1.0","secp256k1":"^5.0.1","node-fetch":"^2.7.0","dera-logger":"^2.0.0","ethereumjs-abi":"^0.6.8","@ethereumjs/rlp":"^5.0.2","ethereumjs-util":"^7.1.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/diodejs_0.4.1_1774125180211_0.569039725827595","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"diodejs","version":"0.4.2","author":"","license":"ISC","_id":"diodejs@0.4.2","maintainers":[{"name":"deratech","email":"omer@derateknoloji.com"}],"dist":{"shasum":"d914d4785726fd73c5757fc3c3132b61429c7b75","tarball":"https://registry.npmjs.org/diodejs/-/diodejs-0.4.2.tgz","fileCount":30,"integrity":"sha512-8KXE4UmJcKzLoQ2pm3BmWr27u3pdlEUHK5juhrbeGTk885PnwOfOGNUJaHoJqdvEURHbG16EJw/kSojphThimA==","signatures":[{"sig":"MEQCICc5mYEWNVW9/twMxw38kUzC6Jl8IF61THYewPpewmUdAiB1bN8F0RgyoMu8HQFjr+LzH3rKn2TP0PM6+Ka1cBuQhw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":350298},"main":"index.js","engines":{"node":">=18"},"gitHead":"e070016130e14e3aafd413d02832d31e6afb134f","scripts":{"test":"node --test"},"_npmUser":{"name":"deratech","email":"omer@derateknoloji.com"},"_npmVersion":"10.8.2","description":"A JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.19.0","rlp":"^3.0.0","dotenv":"^16.4.7","ethers":"^6.13.2","keccak":"^3.0.4","asn1.js":"^5.4.1","jsrsasign":"^11.1.0","secp256k1":"^5.0.1","node-fetch":"^2.7.0","dera-logger":"^2.0.0","ethereumjs-abi":"^0.6.8","@ethereumjs/rlp":"^5.0.2","ethereumjs-util":"^7.1.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/diodejs_0.4.2_1775429009413_0.9415225798582376","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"diodejs","version":"0.4.3","author":"","license":"ISC","_id":"diodejs@0.4.3","maintainers":[{"name":"deratech","email":"omer@derateknoloji.com"}],"dist":{"shasum":"bca8ca4862cc01ca2f5929ccc1d1bb32f3437f1c","tarball":"https://registry.npmjs.org/diodejs/-/diodejs-0.4.3.tgz","fileCount":31,"integrity":"sha512-6JhjBnaUXA1gtx42bvM6lYitkd46tY3uXTDqEQPLtHNEElziMI/G9T31LTNimFsdb/L5KZ9ZzTJk1AjlK6FAig==","signatures":[{"sig":"MEYCIQDpMQcBl0wGBfS17QisdJGTjrOQD0aP6C+TBAbL2oftggIhAMY/iSnUFQ09wg2bSu9PSQrEYXvhOv1r2pWdjQ+FOC7n","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":360186},"main":"index.js","engines":{"node":">=18"},"gitHead":"4ee5cb7a43e3496fef3d9b00e3306e633969a9dc","scripts":{"test":"node --test"},"_npmUser":{"name":"deratech","email":"omer@derateknoloji.com"},"_npmVersion":"10.8.2","description":"A JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.19.0","rlp":"^3.0.0","dotenv":"^16.4.7","ethers":"^6.13.2","keccak":"^3.0.4","asn1.js":"^5.4.1","jsrsasign":"^11.1.0","secp256k1":"^5.0.1","node-fetch":"^2.7.0","dera-logger":"^2.0.0","ethereumjs-abi":"^0.6.8","@ethereumjs/rlp":"^5.0.2","ethereumjs-util":"^7.1.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/diodejs_0.4.3_1781781335727_0.43873821251030765","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"diodejs","version":"0.4.4","author":"","license":"ISC","_id":"diodejs@0.4.4","maintainers":[{"name":"deratech","email":"omer@derateknoloji.com"}],"dist":{"shasum":"c3a5638c58d947281823447c7613e6a4a30131ed","tarball":"https://registry.npmjs.org/diodejs/-/diodejs-0.4.4.tgz","fileCount":31,"integrity":"sha512-52PNykE+1JQbkEkdpmkB9iWoK4KXsnrADuLVBuVWcbf2EMnSy/77XZFXYBhFEuC6aZjOdQiUqUytVyMrFAe/qQ==","signatures":[{"sig":"MEYCIQDxI92RCLXJJ96Zt2nDi7SO7E44uD2fzkmmV53ZDqsg1AIhAJmPRogYh8mxFJyPSzkSlvkV0hUGPRtdW/aHtLn1/U8x","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":364913},"main":"index.js","engines":{"node":">=18"},"gitHead":"56dbc3d1e0297417faaa9366244c62c5a8909abd","scripts":{"test":"node --test"},"_npmUser":{"name":"deratech","email":"omer@derateknoloji.com"},"_npmVersion":"10.8.2","description":"A JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.19.0","rlp":"^3.0.0","dotenv":"^16.4.7","ethers":"^6.13.2","keccak":"^3.0.4","asn1.js":"^5.4.1","jsrsasign":"^11.1.0","secp256k1":"^5.0.1","node-fetch":"^2.7.0","dera-logger":"^2.0.0","ethereumjs-abi":"^0.6.8","@ethereumjs/rlp":"^5.0.2","ethereumjs-util":"^7.1.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/diodejs_0.4.4_1781814456989_0.5256548572469544","host":"s3://npm-registry-packages-npm-production"}},"0.4.5":{"name":"diodejs","version":"0.4.5","author":"","license":"ISC","_id":"diodejs@0.4.5","maintainers":[{"name":"deratech","email":"omer@derateknoloji.com"}],"dist":{"shasum":"b0bb806cd538c495861d93daaefa0490a39d6fae","tarball":"https://registry.npmjs.org/diodejs/-/diodejs-0.4.5.tgz","fileCount":33,"integrity":"sha512-U2qPG58J0C7awK6qpZ+q/xGgGjoir6SKDyub24Boo1cN3AkZh0VlFc49H53UL//mmDyNWagFTBD1JouRAs6LRQ==","signatures":[{"sig":"MEUCIFcijeGBXkazZM31LAv/4NNfpi6d1InfF9m/oljCXGatAiEA68XtzAGPJIisbqZNxpVejwEXmRe92We8/UBsnRa9U8o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":386242},"main":"index.js","engines":{"node":">=18"},"gitHead":"24edcd507aaf4c74116f1d057e1f0f1d552a5c19","scripts":{"test":"node --test"},"_npmUser":{"name":"deratech","email":"omer@derateknoloji.com"},"_npmVersion":"10.8.2","description":"A JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.19.0","rlp":"^3.0.0","dotenv":"^16.4.7","ethers":"^6.13.2","keccak":"^3.0.4","asn1.js":"^5.4.1","jsrsasign":"^11.1.0","secp256k1":"^5.0.1","node-fetch":"^2.7.0","dera-logger":"^2.0.0","ethereumjs-abi":"^0.6.8","@ethereumjs/rlp":"^5.0.2","ethereumjs-util":"^7.1.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/diodejs_0.4.5_1783323079687_0.16918876630425306","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"diodejs","version":"0.5.0","author":"","license":"ISC","_id":"diodejs@0.5.0","maintainers":[{"name":"deratech","email":"omer@derateknoloji.com"}],"dist":{"shasum":"4ea64ff4a1960618ca4accf5bb741cc5a183bbfa","tarball":"https://registry.npmjs.org/diodejs/-/diodejs-0.5.0.tgz","fileCount":39,"integrity":"sha512-GWj7zo9cMWkJvQJDzYS2flFT09MOj/86wDhBwkX4dvnxH15zhJIEcRyrcmTWYb9jZiyOBqAsApLFAZ+6MiRTJw==","signatures":[{"sig":"MEQCID4MY6ClidWsI6VQIirh9uSL6Hil3Fi9PF+Kz3FmgKhxAiARws9aoOYgv2KK17N8ou5FcziO3jsdUKc3T0rACZPK5g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":583451},"main":"index.js","engines":{"node":">=18"},"gitHead":"bc83e722cd4885cd15ff7012b9c5e30a58816488","scripts":{"test":"node --test"},"_npmUser":{"name":"deratech","email":"omer@derateknoloji.com"},"_npmVersion":"10.8.2","description":"A JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.21.3","dotenv":"^16.6.1","keccak":"^3.0.4","asn1.js":"^5.4.1","winston":"^3.17.0","jsrsasign":"^11.1.5","secp256k1":"^5.0.2","ethereumjs-abi":"^0.6.8","@ethereumjs/rlp":"^5.0.2","ethereumjs-util":"^7.1.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/diodejs_0.5.0_1788350066869_0.017355384066267243","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"diodejs","version":"0.5.1","author":"","license":"ISC","_id":"diodejs@0.5.1","maintainers":[{"name":"deratech","email":"omer@derateknoloji.com"}],"dist":{"shasum":"bcbd44ee80bc8c76ce0644d91c90068f90fa4661","tarball":"https://registry.npmjs.org/diodejs/-/diodejs-0.5.1.tgz","fileCount":40,"integrity":"sha512-qoBRmpHZnG/Poh3o2pdHMjWLrx911P5GLMgFu6SYLOyPD6/PdaY5t1HNLjBiGJRJER32nKHR9FxbWi6GpGw1ng==","signatures":[{"sig":"MEYCIQDAfEvnaD3S28t/oyqY6TOME8hDzGwcCQyh8eKpXAP/2QIhAM/zrP9i75RS3pC1qu/zRw5d29xcp8gsd9ax871OpFpC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":586371},"main":"index.js","engines":{"node":">=18"},"gitHead":"ebde178a40c855b238d2b6d3f987f5529dc5c68f","scripts":{"test":"node --test"},"_npmUser":{"name":"deratech","email":"omer@derateknoloji.com"},"_npmVersion":"10.8.2","description":"A JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.21.3","dotenv":"^16.6.1","keccak":"^3.0.4","asn1.js":"^5.4.1","winston":"^3.17.0","jsrsasign":"^11.1.5","secp256k1":"^5.0.2","ethereumjs-abi":"^0.6.8","@ethereumjs/rlp":"^5.0.2","ethereumjs-util":"^7.1.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/diodejs_0.5.1_1788509537472_0.7995453919310822","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"diodejs","version":"0.5.2","author":"","license":"ISC","_id":"diodejs@0.5.2","maintainers":[{"name":"deratech","email":"omer@derateknoloji.com"}],"dist":{"shasum":"1100d960867cf8f3163b1855e3ba9ec3b26249da","tarball":"https://registry.npmjs.org/diodejs/-/diodejs-0.5.2.tgz","fileCount":35,"integrity":"sha512-6i2U3JvG6x+anozyADj0J293VYoGDj6iv4rcy6PF0YbK853palabtPcgZ/UbedjXS9EfVFTCImpNDMoJbXasOQ==","signatures":[{"sig":"MEUCIQDwWUihzm7Wb+tKOJrW2/11LiOgKP3/+4JeV3E8F/6MjQIgXQVpdUowHHUFvJesWpXR5JoCKdF2Uld5geQdlB8HUN4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":632082},"main":"index.js","engines":{"node":">=18"},"gitHead":"017e3f7baf390905dd5cac1cf9ddf65939f8cf4e","scripts":{"test":"node --test"},"_npmUser":{"name":"deratech","email":"omer@derateknoloji.com"},"_npmVersion":"10.8.2","description":"A JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.21.3","dotenv":"^16.6.1","keccak":"^3.0.4","asn1.js":"^5.4.1","winston":"^3.17.0","jsrsasign":"^11.1.5","secp256k1":"^5.0.2","ethereumjs-abi":"^0.6.8","@ethereumjs/rlp":"^5.0.2","ethereumjs-util":"^7.1.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/diodejs_0.5.2_1788772658526_0.13208986374305542","host":"s3://npm-registry-packages-npm-production"}},"0.5.3":{"name":"diodejs","version":"0.5.3","author":"","license":"ISC","_id":"diodejs@0.5.3","maintainers":[{"name":"deratech","email":"omer@derateknoloji.com"}],"dist":{"shasum":"bbe55d641331125909494cc955dda4fc1b62474f","tarball":"https://registry.npmjs.org/diodejs/-/diodejs-0.5.3.tgz","fileCount":41,"integrity":"sha512-piFCebpl3gpBxnLmS059lmJM+0YkYpI4W4knvZqke4sPUpQqFNyzmLE6lroAecq+ySNb7R/vjy7y5UIXhBvqBQ==","signatures":[{"sig":"MEYCIQD0pWHnBU2dfLc0wi9fLhkLPBnfRCPhQ6Qri/GeBcg20gIhAK+N68ly8b07Ibk3AFR+gWlypwgTQu3irVJkzZQ6GQgr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":671740},"main":"index.js","engines":{"node":">=18"},"gitHead":"8feb655037cc82ac5ca3d05f33e226311cf32631","scripts":{"test":"node --test"},"_npmUser":{"name":"deratech","email":"omer@derateknoloji.com"},"_npmVersion":"10.8.2","description":"A JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.21.3","dotenv":"^16.6.1","keccak":"^3.0.4","asn1.js":"^5.4.1","winston":"^3.17.0","jsrsasign":"^11.1.5","secp256k1":"^5.0.2","ethereumjs-abi":"^0.6.8","@ethereumjs/rlp":"^5.0.2","ethereumjs-util":"^7.1.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/diodejs_0.5.3_1788863750019_0.5031070688185721","host":"s3://npm-registry-packages-npm-production"}},"0.5.4":{"name":"diodejs","version":"0.5.4","author":"","license":"ISC","_id":"diodejs@0.5.4","maintainers":[{"name":"deratech","email":"omer@derateknoloji.com"}],"dist":{"shasum":"9eeb0bdb1fbd83a999ce2fb46320743217b5da5a","tarball":"https://registry.npmjs.org/diodejs/-/diodejs-0.5.4.tgz","fileCount":42,"integrity":"sha512-KeSg+vIsykbIp73CaAqqfcjemJW8A2zlGCXrUsrRGXYAKt+zH5tXgYZ7HO0zSt0zi8an4fF3Boq9wx7W5ytlew==","signatures":[{"sig":"MEYCIQD2iEy3MD5/70XPc/bQDmI0fTK7c+rNjCS7pQ2Gwnmx4AIhAM69FdKqiNFwOu6r4DK8Wqo3xgkwfRFqF5o0Bcz93IE/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":693673},"main":"index.js","engines":{"node":">=18"},"gitHead":"64bcd0515b3b68062cf681581d657f88a9092825","scripts":{"test":"node --test"},"_npmUser":{"name":"deratech","email":"omer@derateknoloji.com"},"_npmVersion":"10.8.2","description":"A JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.21.3","dotenv":"^16.6.1","keccak":"^3.0.4","asn1.js":"^5.4.1","winston":"^3.17.0","jsrsasign":"^11.1.5","secp256k1":"^5.0.2","ethereumjs-abi":"^0.6.8","@ethereumjs/rlp":"^5.0.2","ethereumjs-util":"^7.1.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/diodejs_0.5.4_1788890823940_0.6985763333132575","host":"s3://npm-registry-packages-npm-production"}},"0.5.5":{"name":"diodejs","version":"0.5.5","author":"","license":"ISC","_id":"diodejs@0.5.5","maintainers":[{"name":"deratech","email":"omer@derateknoloji.com"}],"dist":{"shasum":"14d5a06b347175d600ec94a3a70608b7e57e27ac","tarball":"https://registry.npmjs.org/diodejs/-/diodejs-0.5.5.tgz","fileCount":43,"integrity":"sha512-TgQSTgRaEv5BbpknzIoDXgQsbGJJomUggritZ7LFoPHI3rGkknd/nZ2YDWWZWoWCAXoIhoSn4Hld2QfN3mAUpQ==","signatures":[{"sig":"MEUCIGgmNhFd0vCVr1jc/4lzsk0yr/X1jJXKL32/iOJSJ9qHAiEAoVwRp6j15eNCGvkfnuTMjj7jP+VROd13ZIMwRbTi8Bw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":709134},"main":"index.js","engines":{"node":">=18"},"gitHead":"b5b3b19f8febc447dd663c6ddd96cb12310752c0","scripts":{"test":"node --test"},"_npmUser":{"name":"deratech","email":"omer@derateknoloji.com"},"_npmVersion":"10.8.2","description":"A JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.21.3","dotenv":"^16.6.1","keccak":"^3.0.4","asn1.js":"^5.4.1","winston":"^3.17.0","jsrsasign":"^11.1.5","secp256k1":"^5.0.2","ethereumjs-abi":"^0.6.8","@ethereumjs/rlp":"^5.0.2","ethereumjs-util":"^7.1.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/diodejs_0.5.5_1789074665699_0.8028570665237498","host":"s3://npm-registry-packages-npm-production"}},"0.5.7":{"name":"diodejs","version":"0.5.7","author":"","license":"ISC","_id":"diodejs@0.5.7","maintainers":[{"name":"deratech","email":"omer@derateknoloji.com"}],"dist":{"shasum":"bc83961981bea2a590d59efaf58847b860d963ab","tarball":"https://registry.npmjs.org/diodejs/-/diodejs-0.5.7.tgz","fileCount":44,"integrity":"sha512-wxLuEFVvxJmL0T+nILjwK7Hh9geVE6NNJ1MmRP0RPWE6koWhdlI2R6LsCPg+BQ2D2W3/Rg5kSkMGPIjonVQXMQ==","signatures":[{"sig":"MEUCIQD0POEB2nDTLXCTYNAoQdoV7svOgtqsccG2/RJFDxDgQgIgY1nNTd8czqldW2eR2vu93ZKKEgT0TusbBDb41vcoMAk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":737760},"main":"index.js","engines":{"node":">=18"},"gitHead":"d78e0eb9ab9f68c950fbc3d83e96f61354a85be7","scripts":{"test":"node --test"},"_npmUser":{"name":"deratech","email":"omer@derateknoloji.com"},"_npmVersion":"10.8.2","description":"A JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.21.3","dotenv":"^16.6.1","keccak":"^3.0.4","asn1.js":"^5.4.1","winston":"^3.17.0","jsrsasign":"^11.1.5","secp256k1":"^5.0.2","ethereumjs-abi":"^0.6.8","@ethereumjs/rlp":"^5.0.2","ethereumjs-util":"^7.1.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/diodejs_0.5.7_1789380100533_0.9198471469011598","host":"s3://npm-registry-packages-npm-production"}},"0.5.8":{"name":"diodejs","version":"0.5.8","author":"","license":"ISC","_id":"diodejs@0.5.8","maintainers":[{"name":"deratech","email":"omer@derateknoloji.com"}],"dist":{"shasum":"9d5f0cb4490cac299f19652a9f5f516b2dd36637","tarball":"https://registry.npmjs.org/diodejs/-/diodejs-0.5.8.tgz","fileCount":44,"integrity":"sha512-/CvSTrGz0Gl75W60n+TJgOeNcEMj/ip59wgolczxVw/mJw1O134CWBnaqqNpJajDXXxgoIDQ+P6Y8cWnRTS7KQ==","signatures":[{"sig":"MEUCIQDlVyb4uGeFTkWFKoXpCK70sf9KPLNEwypBKOj13gaJkQIgXayEt3Hy55SemPZiOPkofwDFfSBbqUk4nXLGfqoLsec=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":739464},"main":"index.js","engines":{"node":">=18"},"gitHead":"ce9caef772d236539c4ab94172a5e4d39fd1b782","scripts":{"test":"node --test"},"_npmUser":{"name":"deratech","email":"omer@derateknoloji.com"},"_npmVersion":"10.8.2","description":"A JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.21.3","dotenv":"^16.6.1","keccak":"^3.0.4","asn1.js":"^5.4.1","winston":"^3.17.0","jsrsasign":"^11.1.5","secp256k1":"^5.0.2","ethereumjs-abi":"^0.6.8","@ethereumjs/rlp":"^5.0.2","ethereumjs-util":"^7.1.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/diodejs_0.5.8_1789508276158_0.3027233582364872","host":"s3://npm-registry-packages-npm-production"}},"0.5.10":{"_id":"diodejs@0.5.10","dist":{"shasum":"a8998e51a42178f1b7373b35ea5e07d9ea166a05","tarball":"https://registry.npmjs.org/diodejs/-/diodejs-0.5.10.tgz","fileCount":44,"integrity":"sha512-vAFaTCAzPCDJzW3jxO06OZBgxK2OEX+EHJ97A0nBS+Qmv9bEqc4fMiWeLOrp5YSgYeDkD4/h0wT0oOEcuSKvmA==","signatures":[{"sig":"MEUCIH6sAG0UW+JsJGujVUBjho2DtNB28U9CJdmmdnTdUbUAAiEAxZzGc2MhFTIaA056B2I0/qvnBHVKS2K/N8Jf4QYMJ2U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCAOhB0/fY94YFddSxqrTwqyT0w6VKLW5WiTSRipVI9pAIhAM/BPmuBFXgyp6tIdeAwKylrbhtDePo8bpV+Zj1htfWH"}],"unpackedSize":774118},"main":"index.js","name":"diodejs","author":"","engines":{"node":">=18"},"gitHead":"349cc0b8d7751989db0e61668d54ea3621c1f7ec","license":"ISC","scripts":{"test":"node --test"},"version":"0.5.10","_npmUser":{"name":"deratech","email":"omer@derateknoloji.com"},"_npmVersion":"10.8.2","description":"A JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.","directories":{},"maintainers":[{"name":"deratech","email":"omer@derateknoloji.com"}],"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.21.3","dotenv":"^16.6.1","keccak":"^3.0.4","asn1.js":"^5.4.1","winston":"^3.17.0","jsrsasign":"^11.1.5","secp256k1":"^5.0.2","ethereumjs-abi":"^0.6.8","@ethereumjs/rlp":"^5.0.2","ethereumjs-util":"^7.1.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/diodejs_0.5.10_1790292936961_0.5827725193924029"}}},"time":{"created":"2024-09-26T21:09:10.363Z","modified":"2026-09-24T23:35:37.234Z","0.0.3":"2024-09-26T21:09:10.551Z","0.0.4":"2025-02-25T18:15:09.283Z","0.0.5":"2025-03-05T15:14:23.231Z","0.1.0":"2025-03-07T13:44:37.702Z","0.1.1":"2025-03-07T18:11:25.526Z","0.1.3":"2025-03-07T22:58:59.706Z","0.1.4":"2025-03-08T00:06:28.386Z","0.1.5":"2025-03-08T21:57:28.139Z","0.1.6":"2025-03-10T17:09:14.885Z","0.2.0":"2025-03-16T20:33:21.213Z","0.2.1":"2025-04-13T01:52:52.687Z","0.2.2":"2025-04-13T03:45:38.352Z","0.3.0":"2025-09-05T10:10:11.425Z","0.4.0":"2026-02-04T12:37:12.880Z","0.4.1":"2026-03-21T20:33:00.381Z","0.4.2":"2026-04-05T22:43:29.567Z","0.4.3":"2026-06-18T11:15:35.928Z","0.4.4":"2026-06-18T20:27:37.208Z","0.4.5":"2026-07-06T07:31:19.857Z","0.5.0":"2026-09-02T11:54:26.991Z","0.5.1":"2026-09-04T08:12:17.617Z","0.5.2":"2026-09-07T09:17:38.670Z","0.5.3":"2026-09-08T10:35:50.427Z","0.5.4":"2026-09-08T18:07:04.123Z","0.5.5":"2026-09-10T21:11:05.833Z","0.5.7":"2026-09-14T10:01:40.658Z","0.5.8":"2026-09-15T21:37:56.334Z","0.5.10":"2026-09-24T23:35:37.055Z"},"license":"ISC","description":"A JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.","maintainers":[{"name":"deratech","email":"omer@derateknoloji.com"}],"readme":"# DiodeJs\n\n`BindPort` configuration accepts an optional `listenHost` IP address. Use\n`{ targetPort: 8088, deviceIdHex, protocol: 'tls', listenHost: '127.0.0.1' }`\nfor a local-only management tunnel. Omitting it preserves the existing listener\nbehavior. This setting does not change the selected API or Native transport.\n\nRelease candidate: `0.5.6`, fixing config/app connections delayed by stale device tickets.\n\nWhen a device lookup is still dialing a relay after 250 ms, bind opening tries\nready relays and then the existing bounded seed fallback. The lookup continues\nwithin its original deadline and remains available for destinations reachable\nonly through a cold, non-seed relay. Cancellation prevents late tunnel opens.\nThis applies to both API and Native transport without changing application data\nor authorization. A live config read that previously took 21.7 seconds completed\nin 2.2–3.0 seconds with the original seven-second Service deadline.\n\nFirst-start identity creation supports Android app storage, where SELinux can\ndeny hard links. The fallback uses a private directory lock and atomic rename\nof the complete, flushed key file. Concurrent starters reuse the winning identity;\nexisting or corrupt identities are never replaced. A stale creation lock fails\nclosed after five seconds. If startup crashed before creating `keys.json`, stop\nall writers and remove only the empty `keys.json.lock` directory before retrying.\nNever delete an existing identity to resolve a connection error.\n\nIf all connected routes return `not found`, tunnel opening tries at most three\nadditional configured seed relays. Each trial stays available until the caller\nregisters its tunnel; idle RTT pruning can then resume. Existing connection and\nRPC deadlines bound each attempt. This recovers stale destination tickets on\nclients with a small warm-relay budget. Transport selection and publisher access\nchecks are preserved; application data is never replayed.\n\nNative TCP relay selection now checks the allocated data socket before accepting\na relay. An unreachable socket closes that allocation and releases its lease,\nthen tries the other available relays while the application socket stays paused.\nCancellation closes late allocations. There is no API downgrade or replay of\napplication data; failures after authentication still end the stream.\n\nOn 2026-09-09, the live disposable-peer benchmark through `eu1.prenet.diode.io`\npassed Native TCP twice (1 MiB upload-plus-echo, 60.32 and 73.56 Mbps, not one-way\ncapacity). The OrendaService application test still failed on its automatically\nselected route: allocated data-port timeouts and a handshake timeout. A successful\ncontrol connection or local relay test does not qualify a public Native route.\nThis branch is unreleased; installed diodejs 0.5.4 does not contain this retry fix.\n\n### Relay selection and live performance\n\nConnected relays rank by measured RTT, with recently failed probes demoted.\nAn older RTT sample triggers a background refresh without automatically losing\nto a slower, newer sample. Slow destination tickets are reconciled even when\ntheir relay already has a warm connection. Existing tunnels stay on their relay.\n\nRun `node scripts/benchmark-network.js --help` for live seed discovery, handshake\ntimings, and API TCP/TLS/UDP and Native TCP/UDP echo measurements. The benchmark\nuses disposable identities and a temporary echo service restricted to its own\nclient. `--routing` reproduces score aging while measuring the actual selected\ndata path. See [the September performance report](https://github.com/DeraTechDesign/diode_js/blob/main/docs/performance-2026-09-08.md)\nfor results, historical comparisons, limitations, and reproduction commands.\n\n### Native TCP/UDP transport\n\nNative transport (`transport: \"native\"`) uses `portopen2` and the existing\nauthenticated, encrypted native wire protocol. It runs with Node's built-in\nTCP/UDP/streams/crypto APIs and the existing cryptography packages' JavaScript\nfallbacks; the transport choice does not require a native addon.\n\nNative TCP now uses bounded stream backpressure in both directions, preserves\nhalf-close responses and final buffered bytes, and flushes its TLS handshake\nbefore releasing the handshake channel. Native opens can retry another relay\nwithout switching transport or replaying application data. TCP frame processing\navoids repeated copies of fragmented ciphertext. Existing identity signatures,\npublish whitelists, authenticated encryption, and UDP replay checks remain.\n\nNative supports TCP and UDP. API remains the default and handles the library's\nTLS protocol. Select the transport explicitly; application protocols such as\nRDP and SQL are carried inside the selected stream.\n\nRun `node scripts/benchmark-native-framing.js` for the controlled receive-codec\nbenchmark. It compares copying/decryption with 0.5.2 and does not measure public\nnetwork performance. Native integration tests run with addons disabled using\n`node --require ./test/fixtures/no-native-addons.cjs --test test/nativeTcp.integration.test.js`.\n\n### API transport stability\n\nAPI TCP and TLS streams use an ordered send window capped at 256 KiB and 16\nunacknowledged frames per direction. This avoids waiting a full relay round trip\nfor every write while preserving Node stream backpressure. Frames remain below\nthe 65,535-byte wire limit; failed stream data is never replayed. Graceful EOF\ndrains queued data on both endpoints before closing the remote ref. Errors,\nrelay disconnects, access revocation, and explicit disposal still tear down the\nsession immediately.\n\nSlow local readers apply receive pressure at 256 KiB of queued data and release\nit below 128 KiB, keeping the existing 1 MiB queue limit. API tunnels multiplex\none relay TCP socket, so a paused reader can briefly delay other tunnels on that\nrelay. Every blocked consumer must drain or close before reads resume. A reader\nmaking no queue progress for the I/O timeout (10 seconds by default) is closed;\nprogressing readers refresh that deadline. Disconnects discard the old relay's\nqueued frames and cannot resume a replacement socket.\n\nThe transport uses JavaScript with Node's built-in streams, TCP, and TLS. No new\nnative addon or `portopen2` transport is required. Run\n`node scripts/benchmark-api-tls.js` for a local real-TLS comparison with simulated\n40/80 ms relay acknowledgment latency. Its results are not public-network speed\nmeasurements. `node --test test/apiTls.integration.test.js` checks client-first\nbinary traffic, backpressure, EOF in both directions, and asynchronous failures\nfor API TCP and TLS.\n\nTo verify the existing crypto dependencies' JavaScript fallbacks, run\n`node --require ./test/fixtures/no-native-addons.cjs --test test/apiTls.integration.test.js`.\nThis blocks loading `.node` addons while exercising the same real TCP/TLS tests.\n\n## Overview\n`diodejs` is a JavaScript client for interacting with the Diode network. It provides functionalities to bind and publish ports, send RPC commands, and handle responses.\n\n## Installation\n```bash\nnpm install diodejs\n```\n\n### Quick Start\n\nWarnings and errors are always written to stderr. Set `LOG=true` to also enable\nbounded persistent logging in `logs/diodejs.log`; the default retention is five\nfiles of at most 2 MiB each. Use `DIODE_LOG_DIRECTORY`,\n`DIODE_LOG_MAX_BYTES`, and `DIODE_LOG_MAX_FILES` to reduce those limits or\nchange the directory. Set `DEBUG=true` together with `LOG=true` to enable debug\noutput.\n\nCan also use .env files\n\n### Connection Settings\n\nConnection retry behavior can be configured via environment variables:\n\n| Environment Variable | Description | Default |\n|----------------------|-------------|---------|\n| DIODE_MAX_RETRIES | Maximum number of reconnection attempts | Infinity |\n| DIODE_RETRY_DELAY | Initial delay between retries (ms) | 1000 |\n| DIODE_MAX_RETRY_DELAY | Maximum delay between retries (ms) | 30000 |\n| DIODE_AUTO_RECONNECT | Whether to automatically reconnect | true |\n| DIODE_TICKET_BYTES_THRESHOLD | Bytes threshold for ticket updates | 4194304 (4 MiB) |\n| DIODE_TICKET_UPDATE_INTERVAL | Time interval for ticket updates (ms) | 30000 (30s) |\n\nWith relay `hello` version 1001, ticket usage is an absolute device byte count.\nThe client checks the ticket epoch before and after fetching it, and again\nbefore signing. A change between those steps cancels the ticket so the next\nattempt fetches a fresh report. The relay report contains no epoch, however,\nand the relay's usage counter can follow a different clock from the ticket\nchain. This check cannot prove which epoch a high report belongs to after a\ncold start or reconnect. Complete protection requires the relay to return an\nepoch alongside usage.\n\nExample `.env` file:\n```\nDIODE_MAX_RETRIES=10\nDIODE_RETRY_DELAY=2000\nDIODE_MAX_RETRY_DELAY=20000\nDIODE_AUTO_RECONNECT=true\nDIODE_TICKET_BYTES_THRESHOLD=512000\nDIODE_TICKET_UPDATE_INTERVAL=30000\n```\n\nThese settings can also be configured programmatically on the relay connections managed by `DiodeClientManager`:\n```javascript\nconst { DiodeClientManager } = require('diodejs');\n\nasync function main() {\n  const client = new DiodeClientManager({ keyLocation: './db/keys.json' });\n  await client.connect();\n\n  for (const connection of client.getConnections()) {\n    connection.setReconnectOptions({\n      maxRetries: 10,\n      retryDelay: 2000,\n      maxRetryDelay: 20000,\n      autoReconnect: true\n    });\n\n    connection.setTicketBatchingOptions({\n      threshold: 512000,\n      interval: 30000\n    });\n  }\n}\n\nmain();\n```\n\nFleet contract selection is configured on the manager:\n```javascript\nconst { DiodeClientManager } = require('diodejs');\n\nasync function main() {\n  const client = new DiodeClientManager({\n    keyLocation: './db/keys.json',\n    fleetContract: '0x1111111111111111111111111111111111111111',\n  });\n\n  await client.connect();\n\n  // Applies on the next ticket generated by each active relay connection.\n  client.setFleetContract('0x2222222222222222222222222222222222222222');\n}\n\nmain();\n```\n\nIf `fleetContract` is omitted, tickets continue using the default contract `0x6000000000000000000000000000000000000000`.\n\n### Multi-Relay Connections (Recommended)\n\nYou can connect to multiple Diode relays and automatically route binds to the relay where the target device is connected.\n\n`DiodeClientManager` ranks relays by observed ping latency, excluding DNS, TLS, and ticket setup time. `connect()` resolves as soon as one relay completes its authenticated handshake. Remaining candidate measurements continue in the background, persist relay scores to disk, and improve the preferred relay for control-plane RPC calls. Idle pruning waits for startup coverage and preserves active tunnels and pending tunnel opens.\n\nWhen neither `host` nor `hosts` is specified, the manager starts from the default seed pool, any discovery-provider candidates, built-in `dio_network` candidates, and previously successful non-provider relays saved in `relay-scores.json`. Without live network discovery it probes all default seeds once. When live network discovery returns usable relays, coverage uses a region-diverse seed bootstrap subset plus the bounded discovery sample, then continues measuring the remaining seeds while keeping region diversity in the warm set. If you pass `host` or `hosts`, startup stays constrained to those configured relays unless you explicitly opt into using the discovery provider alongside them.\n\n```javascript\nconst { DiodeClientManager, BindPort } = require('diodejs');\n\nasync function main() {\n  // Connect to default relay pool (pre-net defaults)\n  const client = new DiodeClientManager({ keyLocation: './db/keys.json' });\n  await client.connect();\n\n  const bind = new BindPort(client, {\n    3003: { targetPort: 8080, deviceIdHex: '0x...', protocol: 'tcp' }\n  });\n  bind.bind();\n}\n```\n\nYou can tune relay selection if needed:\n\n```javascript\nconst client = new DiodeClientManager({\n  keyLocation: './db/keys.json',\n  relaySelection: {\n    startupConcurrency: 3,\n    minReadyConnections: 2,\n    probeTimeoutMs: 1200,\n    connectionTimeoutMs: 5000,\n    targetConnectTimeoutMs: 10000,\n    warmConnectionBudget: 3,\n    probeAllInitialCandidates: true,\n    continueProbingUntestedSeeds: true,\n    regionDiverseSeedOrdering: true,\n    discoveryProviderTimeoutMs: 1500,\n    backgroundProbeIntervalMs: 300000,\n    slowRelayThresholdMs: 250,\n    slowDeviceRetryTtlMs: 5000,\n    scoreCachePath: './db/relay-scores.json'\n  }\n});\n```\n\nRouting note: the initiating client can prefer a better local relay, but it cannot override the relay encoded in the remote device ticket. Best results come when both clients use the manager's relay ranking so each side reconnects toward a closer relay over time.\n\nDiscovery note: startup discovery sources are now `configured/seed`, `discoveryProvider`, built-in live `dio_network` discovery, cached non-provider/non-network relays, and target-on-demand relay resolution from `getNode(serverId)`. Provider and network membership are not cached independently; only RTT/history is persisted in `relay-scores.json`.\n\nExample discovery provider:\n\n```javascript\nconst fs = require('fs/promises');\n\nconst client = new DiodeClientManager({\n  keyLocation: './db/keys.json',\n  relaySelection: {\n    discoveryProvider: async () => {\n      const data = JSON.parse(await fs.readFile('./relays.json', 'utf8'));\n      return data;\n    },\n    networkDiscovery: {\n      endpoint: 'wss://prenet.diode.io:8443/ws',\n      startupProbeCount: 2,\n      backgroundBatchSize: 12\n    }\n  }\n});\n```\n\n`discoveryProvider(context)` may return either relay strings such as `'relay.example.com:41046'` or objects like `{ host, port, priority, region, metadata }`. The callback receives a read-only `context` object with:\n\n- `defaultPort`\n- `keyLocation`\n- `explicitHost`\n- `explicitHosts`\n- `initialHosts`\n- `knownRelayScores`\n\n`knownRelayScores` contains the manager's current score snapshot for previously seen relays. Provider membership itself is not cached across runs; only relay score history is persisted.\n\nBuilt-in network discovery uses the Diode JSON-RPC websocket endpoint and requests `dio_network`. It is enabled by default only when neither `host` nor `hosts` is set. Only connected `server` nodes are considered, and private/unroutable addresses are filtered unless `includePrivateAddresses` is enabled. When discovery succeeds, startup keeps the seed safety baseline by probing one seed per region before adding the configured discovery sample, instead of blocking on every seed before ready.\n\nIf you provide a host, only that relay is used initially (similar to `-diodeaddrs`):\n\n```javascript\nconst client = new DiodeClientManager({\n  host: 'us2.prenet.diode.io',\n  port: 41046,\n  keyLocation: './db/keys.json'\n});\nawait client.connect();\n```\n\n### Test RPC\n\nHere's a quick example to get you started with RPC functions using `DiodeRPC` Class\n\n```javascript\nconst { DiodeClientManager, DiodeRPC, makeReadable } = require('diodejs');\n\nasync function main() {\n  const host = 'eu2.prenet.diode.io';\n  const port = 41046;\n  const keyLocation = './db/keys.json'; // Optional, defaults to './db/keys.json'\n\n  const client = new DiodeClientManager({ host, port, keyLocation });\n  await client.connect();\n\n  const connection = client.getConnections()[0];\n  if (!connection) {\n    throw new Error('No relay connection available');\n  }\n\n  // Configure reconnection (optional - overrides environment variables)\n  connection.setReconnectOptions({\n    maxRetries: Infinity, // Unlimited reconnection attempts\n    retryDelay: 1000,     // Initial delay of 1 second\n    maxRetryDelay: 30000, // Maximum delay of 30 seconds\n    autoReconnect: true   // Automatically reconnect on disconnection\n  });\n\n  // Configure ticket batching (optional - overrides environment variables)\n  connection.setTicketBatchingOptions({\n    threshold: 512000, // Bytes threshold for ticket updates\n    interval: 30000    // Time interval for ticket updates\n  });\n\n  // Listen for reconnection events (optional)\n  connection.on('reconnecting', (info) => {\n    console.log(`Reconnecting... Attempt #${info.attempt} in ${info.delay}ms`);\n  });\n  connection.on('reconnected', () => {\n    console.log('Successfully reconnected!');\n  });\n  connection.on('reconnect_failed', () => {\n    console.log('Failed to reconnect after maximum attempts');\n  });\n\n  const rpc = new DiodeRPC(connection);\n\n  try {\n    const ping = await rpc.ping();\n    console.log('Ping:', ping);\n    const blockPeak = await rpc.getBlockPeak();\n    console.log('Current Block Peak:', blockPeak);\n\n    const blockHeader = await rpc.getBlockHeader(blockPeak);\n    console.log('Block Header:', makeReadable(blockHeader));\n  } catch (error) {\n    console.error('RPC Error:', error);\n  } finally {\n    client.close();\n  }\n}\n\nmain();\n\n```\n\n### Bind Port\nHere's a quick example to get you started with port forwarding using the `BindPort` class.\n\n#### Port Binding\n```javascript\nconst { DiodeClientManager, BindPort } = require('diodejs');\n\nasync function main() {\n    const host = 'eu2.prenet.diode.io';\n    const port = 41046;\n    const keyLocation = './db/keys.json';\n  \n    const client = new DiodeClientManager({ host, port, keyLocation });\n    await client.connect();\n  \n    // Multiple or single port binding with configuration object\n    const portsConfig = {\n      3002: { \n        targetPort: 80, \n        deviceIdHex: \"5365baf29cb7ab58de588dfc448913cb609283e2\",\n        protocol: \"tls\" // Optional - defaults to TLS if not specified\n      },\n      3003: { \n        targetPort: 443, \n        deviceIdHex: \"0x5365baf29cb7ab58de588dfc448913cb609283e2\",\n        protocol: \"tcp\", // Can be \"tls\", \"tcp\", or \"udp\"\n        transport: \"native\" // Optional - \"api\" (default) or \"native\" for portopen2 (tcp/udp only)\n      }\n    };\n    \n    const portForward = new BindPort(client, portsConfig);\n    portForward.bind();\n    \n    // You can also dynamically add ports with protocol specification\n    portForward.addPort(3004, 8080, \"5365baf29cb7ab58de588dfc448913cb609283e2\", \"udp\");\n    portForward.removePort(3003);\n}\n\nmain();\n```\n\n#### Single Port Binding (Legacy)\n```javascript\nconst { DiodeClientManager, BindPort } = require('diodejs');\n\nasync function main() {\n    const host = 'eu2.prenet.diode.io';\n    const port = 41046;\n    const keyLocation = './db/keys.json';\n  \n    const client = new DiodeClientManager({ host, port, keyLocation });\n    await client.connect();\n  \n    // Legacy method - single port binding (defaults to TLS protocol)\n    const portForward = new BindPort(client, 3002, 80, \"5365baf29cb7ab58de588dfc448913cb609283e2\");\n    portForward.bind();\n}\n\nmain();\n```\n\n### Publish Port\n\nHere's a quick example to get you started with publishing ports using the `PublishPort` class:\n\n```javascript\nconst { DiodeClientManager, PublishPort } = require('diodejs');\n\nasync function main() {\n  const host = 'us2.prenet.diode.io';\n  const port = 41046;\n  const keyLocation = './db/keys.json';\n\n  const client = new DiodeClientManager({ host, port, keyLocation });\n  await client.connect();\n\n  // Option 1: Simple array of ports (all public)\n  const publishedPorts = [8080, 3000]; \n  \n  // Option 2: Object with port configurations for public/private access control\n  const publishedPortsWithConfig = {\n    8080: { mode: 'public' },  // Public port on 127.0.0.1, accessible by any device\n    8081: { mode: 'public', host: '192.168.1.10' }, // Forward to another reachable host\n    3000: { \n      mode: 'private',  \n      host: 'backend.internal',\n      whitelist: [\n        '0x1234567890abcdef1234567890abcdef12345678',\n        '0x9876543210fedcba9876543210fedcba98765432'\n      ] // Only these 20-byte EVM device addresses can connect\n    }\n  };\n  \n  // certPath parameter is maintained for backward compatibility but not required\n  const publishPort = new PublishPort(client, publishedPortsWithConfig);\n\n  // When permanently stopping publication, release sessions and listeners.\n  // clearPorts() only changes the live port set; close() is terminal.\n  // publishPort.close();\n}\n\nmain();\n```\n\n## Reference\n\n### Classes and Methods\n\n#### `DiodeClientManager`\n\n- **Constructor**: `new DiodeClientManager(options)`\n  - `options.host` (string, optional): Single relay host (with or without port). If provided, only this relay is used initially.\n  - `options.port` (number, optional): Port to use when `options.host` has no port. Defaults to `41046`.\n  - `options.hosts` (string[] or comma-separated string, optional): Explicit relay list.\n  - `options.keyLocation` (string, optional): Key storage path (default: `./db/keys.json`).\n  - `options.fleetContract` (string, optional): Fleet contract used for relay tickets. Must be a 20-byte EVM address hex string. Defaults to `0x6000000000000000000000000000000000000000`.\n  - `options.deviceCacheTtlMs` (number, optional): Cache TTL for device relay resolution (default: `30000`).\n  - `options.relaySelection` (object, optional): Relay ranking and probing options.\n    - `enabled` (boolean, optional): Enables smart relay ranking. Defaults to `true`.\n    - `startupConcurrency` (number, optional): Parallel startup probe limit. Defaults to `3`, allowing one seed from each default region to begin together.\n    - `minReadyConnections` (number, optional): Minimum target connection count for the startup probe set. Defaults to `2`.\n    - `probeTimeoutMs` (number, optional): Ping timeout for relay probes. Defaults to `1200`.\n    - `connectionTimeoutMs` (number, optional): DNS/TLS/ticket setup timeout for startup and background relay probes. Defaults to `5000`.\n    - `targetConnectTimeoutMs` (number, optional): Setup timeout for a relay resolved from a target device ticket. Defaults to `10000`.\n    - `warmConnectionBudget` (number, optional): Maximum number of idle control relays to keep after startup coverage completes. Defaults to `3`.\n    - `probeAllInitialCandidates` (boolean, optional): Probes all initial configured/default candidates once before final startup ranking is trusted. Defaults to `true`.\n    - `continueProbingUntestedSeeds` (boolean, optional): Continues probing untested candidates after startup coverage completes. Defaults to `true`.\n    - `regionDiverseSeedOrdering` (boolean, optional): Interleaves seed regions during first-pass probing and warm retention. Defaults to `true`.\n    - `discoveryProvider` (function, optional): Async or sync callback that returns extra relay candidates as strings or `{ host, port, priority, region, metadata }` objects. The callback receives `{ defaultPort, keyLocation, explicitHost, explicitHosts, initialHosts, knownRelayScores }`.\n    - `discoveryProviderTimeoutMs` (number, optional): Timeout for `discoveryProvider` results. Defaults to `1500`.\n    - `useProviderWithExplicitHost` (boolean, optional): Allows provider candidates when `options.host` is set. Defaults to `false`.\n    - `useProviderWithExplicitHosts` (boolean, optional): Allows provider candidates when `options.hosts` is set. Defaults to `false`.\n    - `networkDiscovery` (object, optional): Built-in live directory discovery via the JSON-RPC websocket endpoint.\n      - `enabled` (boolean, optional): Enables live network discovery when no explicit `host` or `hosts` is configured. Defaults to `true` in default mode.\n      - `endpoint` (string, optional): Directory endpoint. Defaults to `wss://prenet.diode.io:8443/ws`.\n      - `method` (string, optional): JSON-RPC method name. Defaults to `dio_network`.\n      - `timeoutMs` (number, optional): Timeout for the discovery websocket request. Defaults to `1500`.\n      - `startupProbeCount` (number, optional): Number of discovered network relays added to the startup coverage probe set. Defaults to `2`.\n      - `backgroundBatchSize` (number, optional): Number of additional discovered relays measured in the background queue per run. Defaults to `12`.\n      - `includePrivateAddresses` (boolean, optional): Allows private or unroutable discovery results to be used. Defaults to `false`.\n    - `backgroundProbeIntervalMs` (number, optional): Minimum interval before background refresh probes are retried for a relay. Defaults to `300000`.\n    - `slowRelayThresholdMs` (number, optional): RTT threshold used to shorten target relay cache entries. Defaults to `250`.\n    - `slowDeviceRetryTtlMs` (number, optional): TTL used for slow target relays. Defaults to `5000`.\n    - `deviceRelayReconciliation` (object, optional): Bounded fallback that re-resolves a device through alternate connected control relays when the initially resolved target relay is much slower than the current control relay baseline.\n      - `enabled` (boolean, optional): Enables reconciliation. Defaults to `true`.\n      - `maxControlRelays` (number, optional): Maximum number of alternate connected control relays queried per reconciliation attempt. Defaults to `2`.\n      - `timeoutMs` (number, optional): Per-control-relay timeout for reconciliation lookups. Defaults to `probeTimeoutMs`.\n      - `minLatencyDeltaMs` (number, optional): Minimum RTT gap between the target relay and the control relay baseline before reconciliation triggers. Defaults to `150`.\n      - `slowdownFactor` (number, optional): Minimum multiple by which the target relay RTT must exceed the control relay baseline before reconciliation triggers. Defaults to `4`.\n    - `scoreCachePath` (string|null, optional): Relay score cache file. Defaults to `./db/relay-scores.json` next to `keyLocation`. Set to `null` to disable persistence.\n\n- **Methods**:\n  - `connect()`: Returns a promise that resolves with the manager when the first relay completes its TLS and ticket handshake. Remaining seed/provider/network measurements continue in the background; idle pruning waits for the required coverage to finish. Failed latency measurements do not discard an otherwise authenticated relay. Rejects if no relay can connect.\n  - `setFleetContract(address)`: Updates the fleet contract used for future ticket generation on managed connections. Accepts a 20-byte EVM address hex string and returns the manager instance.\n  - `getNearestConnection()`: Returns the preferred connected relay. With relay selection enabled, this is the lowest-latency scored relay.\n  - `getConnectionForDevice(deviceId)`: Resolves and returns a relay connection for the device. Returns a promise. Concurrent requests for the same device share the ticket/node lookup and relay handshake; each bind still opens its own tunnel.\n  - `getConnections()`: Returns a list of active connections.\n  - `close()`: Closes all managed connections.\n\nConnections returned by `getConnections()` or `getConnectionForDevice()` emit `reconnecting`, `reconnected`, and `reconnect_failed` events, and support `setReconnectOptions(...)` and `setTicketBatchingOptions({ threshold, interval })`.\n\n#### `DiodeRPC`\n\n- **Constructor**: `new DiodeRPC(connection)`\n  - `connection` (object): A relay connection from `DiodeClientManager.getConnections()` or `DiodeClientManager.getConnectionForDevice()`.\n\n- **Methods**:\n  - `getBlockPeak()`: Retrieves the current block peak. Returns a promise.\n  - `getBlockHeader(index)`: Retrieves the block header for a given index. Returns a promise.\n  - `getBlock(index)`: Retrieves the block for a given index. Returns a promise.\n  - `getObject(deviceId, options)`: Retrieves a device ticket object. Returns a promise.\n  - `getNode(nodeId, options)`: Retrieves relay node information. Returns a promise.\n  - `ping(options)`: Sends a ping command. Returns a promise.\n  - `portOpen(deviceId, port, flags, options)`: Opens a port on the device. Returns a promise.\n  - `portOpen2(deviceId, port, flags, options)`: Opens a native relay port on the device (TCP/UDP). Returns the server relay port.\n  - `portSend(ref, data, options)`: Sends data to the device. Returns a promise.\n  - `portClose(ref, options)`: Closes an API-relayed port. Returns a promise.\n  - `portClose2(physicalPort, options)`: Closes a native relay port. Returns a promise.\n  - `sendError(sessionId, ref, error)`: Sends an error response. Returns a promise.\n  - `sendResponse(sessionId, ref, response)`: Sends a response. Returns a promise.\n  - `getEpoch()`: Retrieves the current epoch. Returns a promise.\n  - `parseTimestamp(blockHeader)`: Parses the timestamp from a block header. Returns a number.\n\nFor the RPC methods that accept `options`, pass `{ timeoutMs, signal }` to set a per-call deadline or an `AbortSignal`. Commands use a 15-second default deadline and reject with typed errors such as `DIODE_COMMAND_TIMEOUT`, `DIODE_COMMAND_ABORTED`, `DIODE_DISCONNECTED`, or `DIODE_RPC_ERROR`. Port open/close failures reject instead of resolving as an undefined success; callers should handle those promise rejections.\n\n#### `BindPort`\n\n- **Constructors**:\n  \n  Legacy Constructor:\n  - `new BindPort(connection, localPort, targetPort, deviceIdHex)`\n    - `connection` (DiodeClientManager): An instance of `DiodeClientManager`.\n    - `localPort` (number): The local port to bind.\n    - `targetPort` (number): The target port on the device.\n    - `deviceIdHex` (string): The device ID in hexadecimal format (with or without '0x' prefix).\n  \n  New Constructor:\n  - `new BindPort(connection, portsConfig)`\n    - `connection` (DiodeClientManager): An instance of `DiodeClientManager`.\n    - `portsConfig` (object): A configuration object where keys are local ports and values are objects with:\n      - `targetPort` (number): The target port on the device.\n      - `deviceIdHex` (string): The device ID in hexadecimal format (with or without '0x' prefix).\n      - `protocol` (string, optional): The protocol to use (\"tls\", \"tcp\", or \"udp\"). Defaults to \"tls\".\n      - `transport` (string, optional): The relay transport to use (\"api\" or \"native\"). Defaults to \"api\". Native uses `portopen2` and supports TCP/UDP only.\n\n- **Methods**:\n  - `bind()`: Binds all configured local ports to their target ports on the devices.\n  - `addPort(localPort, targetPort, deviceIdHex, protocol, transport)`: Adds a new port binding configuration.\n    - `protocol` (string, optional): The protocol to use. Can be \"tls\", \"tcp\", or \"udp\". Defaults to \"tls\".\n    - `transport` (string, optional): The relay transport to use (\"api\" or \"native\"). Defaults to \"api\".\n  - `removePort(localPort)`: Removes a port binding configuration.\n  - `bindSinglePort(localPort)`: Binds a single local port to its target.\n  - `closeAllServers()`: Closes all active server instances.\n  - `dispose()`: Permanently closes servers, active tunnels, and shared manager listeners. Use this when replacing or discarding a `BindPort` instance.\n\n#### `PublishPort`\n\n- **Constructor**: `new PublishPort(connection, publishedPorts, _certPath)`\n  - `connection` (DiodeClientManager): An instance of `DiodeClientManager`.\n  - `publishedPorts` (array|object): Either:\n    - An array of ports to publish (all public mode)\n    - An object mapping ports to their configuration: `{ port: { mode: 'public'|'private', whitelist: ['0x123...'], host: '127.0.0.1' } }`\n  - `_certPath` (string): Has no functionality and maintained for backward compatibility.\n\n- **Methods**:\n  - `addPort(port, config)`: Adds a new port to publish. Config is optional and defaults to public mode.\n    - `port` (number): The port number to publish.\n    - `config` (object): Optional configuration with `mode` ('public'|'private'), `whitelist` array, and `host` string.\n      - `host` (string, optional): Target IP or hostname for the published service. Defaults to `127.0.0.1`.\n      - Private whitelists accept complete 20-byte `0x` EVM addresses; address matching is case-insensitive and stored in lowercase.\n  - `removePort(port)`: Removes a published port.\n    - `port` (number): The port number to remove.\n  - `addPorts(ports)`: Adds multiple ports at once (equivalent to the constructor's publishedPorts parameter).\n    - `ports` (array|object): Either an array of port numbers or an object mapping ports to their configurations.\n  - `getPublishedPorts()`: Returns a plain object with all published ports and their configurations.\n  - `setFlowObserver(callback | null)`: Enables built-in flow tracking for new publisher connections and delivers lifecycle observations. Pass `null` to disable tracking and discard active telemetry. Returns the publisher.\n  - `snapshotFlows()`: Returns current cumulative observations for tracked, connected flows and also delivers each observation to the registered observer. Does not create a background timer.\n  - `clearPorts()`: Removes all published ports. Returns the number of ports that were cleared.\n  - `startListening()`: Starts listening for unsolicited messages.\n  - `stopListening()`: Pauses unsolicited-message handling without closing active sessions.\n  - `close()`: Permanently removes listeners and closes all API/native sessions. A closed instance cannot be restarted; create a new `PublishPort` instead.\n\n##### Built-in publisher flow monitoring\n\n`PublishPort` measures traffic internally for API TCP/TLS/UDP and Native TCP/UDP.\nMonitoring is disabled by default. Enable it before accepting application\nconnections. The observer receives metadata and cumulative byte totals, with no\npacket payloads, URLs, certificate material, or private keys.\n\n```javascript\n// Flush this bounded latest-observation map in a separate background task.\nconst pending = new Map();\nlet droppedObservations = 0;\npublishPort.setFlowObserver((flow) => {\n  if (pending.has(flow.flowId) || pending.size < 2000) {\n    pending.set(flow.flowId, flow);\n  } else {\n    droppedObservations += 1;\n  }\n});\nconst snapshotTimer = setInterval(() => publishPort.snapshotFlows(), 30000);\nsnapshotTimer.unref();\n\n// On shutdown, close first to deliver final observations, then drain the queue.\nclearInterval(snapshotTimer);\npublishPort.close();\npublishPort.setFlowObserver(null);\n```\n\nThe observer is a delivery callback; all connection identification, lifecycle\ntracking, and byte accounting are implemented inside diodeJS. Observer exceptions\nand rejected promises are contained. Callbacks must return promptly; network or\ndisk work should run in the consumer's separate bounded queue. `snapshotFlows()`\nboth delivers and returns observations, so consumers should not enqueue its\nreturn value again.\n\nEach observation contains:\n\n| Field | Meaning |\n| --- | --- |\n| `flowId` | UUID unique to this connection or denied attempt. |\n| `peerAddress` | Normalized lowercase Diode peer wallet address. |\n| `port` | Published target port. |\n| `protocol` | `tcp`, `tls`, or `udp`. |\n| `transport` | `api` or `native`; Native's TLS handshake helper is excluded. |\n| `startedAt` | ISO timestamp when the publisher began tracking the attempt. |\n| `connectedAt` | ISO timestamp when the connection became ready, or `null` for failed setup/denied attempts. |\n| `observedAt` | ISO timestamp for this observation. |\n| `endedAt` | ISO timestamp for a terminal observation; `null` while open. |\n| `status` | `open`, `closed`, `denied`, or `error`. |\n| `bytesToTarget` | Cumulative plaintext bytes submitted toward the target. |\n| `bytesFromTarget` | Cumulative plaintext bytes received from the target. |\n\nAn `open` observation requires the local TCP backend to connect; API TLS also\nrequires the TLS handshake, and Native requires the authenticated native\nhandshake. UDP readiness means the forwarding association is prepared; UDP does\nnot confirm target reachability or datagram delivery. Setup failure produces a\nterminal `error` with `connectedAt: null`, without a preceding `open`. A failure\nafter readiness retains `connectedAt`. Publisher whitelist denials produce a\nterminal zero-byte `denied` observation without connecting to the target.\nAttempts rejected before reaching this publisher cannot appear here.\n\nTCP/TLS counts use the local backend socket's existing `bytesWritten` and\n`bytesRead` counters only at observation time. UDP adds byte lengths inside its\nexisting handlers. No additional TCP payload listeners or per-packet observer\ncallbacks are installed. Counts exclude encryption/framing overhead and are not\nwire billing totals or end-to-end delivery receipts. Use the latest cumulative\nobservation per `flowId`; adding successive observations would double-count.\n\nActive telemetry is attached to existing live connection records and released\nwhen they close. There is no retained history in diodeJS. Disabling monitoring\ndiscards active counters; re-enabling starts tracking new connections only.\n\nRun `node scripts/benchmarkPublishFlows.js` for an opt-in loopback comparison of\ndisabled monitoring versus lifecycle observations plus 25 ms snapshots. It uses\nreal API TCP/TLS streams and simulated relay RPC; results do not establish a\nlive-network performance guarantee. `DIODE_FLOW_BENCH_ROUNDS` (default `5`) and\n`DIODE_FLOW_BENCH_MIB` (default `4`) control the comparison.\n  - `handlePortOpen(sessionIdRaw, messageContent)`: Handles port open requests.\n  - `handlePortSend(sessionIdRaw, messageContent)`: Handles port send requests.\n  - `handlePortClose(sessionIdRaw, messageContent)`: Handles port close requests.\n","readmeFilename":"README.md"}