@yipsec/kdns
Version:
composable p2p networks
3 lines • 32.5 kB
HTML
<html lang="en" style="font-size:16px"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Class: Node</title><!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]--><script src="scripts/third-party/hljs.js" defer="defer"></script><script src="scripts/third-party/hljs-line-num.js" defer="defer"></script><script src="scripts/third-party/popper.js" defer="defer"></script><script src="scripts/third-party/tippy.js" defer="defer"></script><script src="scripts/third-party/tocbot.min.js"></script><script>var baseURL="/",locationPathname="";baseURL=(locationPathname=document.location.pathname).substr(0,locationPathname.lastIndexOf("/")+1)</script><link rel="stylesheet" href="styles/clean-jsdoc-theme.min.css"><svg aria-hidden="true" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none"><defs><symbol id="copy-icon" viewbox="0 0 488.3 488.3"><g><path d="M314.25,85.4h-227c-21.3,0-38.6,17.3-38.6,38.6v325.7c0,21.3,17.3,38.6,38.6,38.6h227c21.3,0,38.6-17.3,38.6-38.6V124 C352.75,102.7,335.45,85.4,314.25,85.4z M325.75,449.6c0,6.4-5.2,11.6-11.6,11.6h-227c-6.4,0-11.6-5.2-11.6-11.6V124 c0-6.4,5.2-11.6,11.6-11.6h227c6.4,0,11.6,5.2,11.6,11.6V449.6z"/><path d="M401.05,0h-227c-21.3,0-38.6,17.3-38.6,38.6c0,7.5,6,13.5,13.5,13.5s13.5-6,13.5-13.5c0-6.4,5.2-11.6,11.6-11.6h227 c6.4,0,11.6,5.2,11.6,11.6v325.7c0,6.4-5.2,11.6-11.6,11.6c-7.5,0-13.5,6-13.5,13.5s6,13.5,13.5,13.5c21.3,0,38.6-17.3,38.6-38.6 V38.6C439.65,17.3,422.35,0,401.05,0z"/></g></symbol><symbol id="search-icon" viewBox="0 0 512 512"><g><g><path d="M225.474,0C101.151,0,0,101.151,0,225.474c0,124.33,101.151,225.474,225.474,225.474 c124.33,0,225.474-101.144,225.474-225.474C450.948,101.151,349.804,0,225.474,0z M225.474,409.323 c-101.373,0-183.848-82.475-183.848-183.848S124.101,41.626,225.474,41.626s183.848,82.475,183.848,183.848 S326.847,409.323,225.474,409.323z"/></g></g><g><g><path d="M505.902,476.472L386.574,357.144c-8.131-8.131-21.299-8.131-29.43,0c-8.131,8.124-8.131,21.306,0,29.43l119.328,119.328 c4.065,4.065,9.387,6.098,14.715,6.098c5.321,0,10.649-2.033,14.715-6.098C514.033,497.778,514.033,484.596,505.902,476.472z"/></g></g></symbol><symbol id="font-size-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11.246 15H4.754l-2 5H.6L7 4h2l6.4 16h-2.154l-2-5zm-.8-2L8 6.885 5.554 13h4.892zM21 12.535V12h2v8h-2v-.535a4 4 0 1 1 0-6.93zM19 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/></symbol><symbol id="add-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11 11V5h2v6h6v2h-6v6h-2v-6H5v-2z"/></symbol><symbol id="minus-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M5 11h14v2H5z"/></symbol><symbol id="dark-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2h.1A6.979 6.979 0 0 0 10 7zm-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938 7.999 7.999 0 0 0 4 12z"/></symbol><symbol id="light-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-2a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.515 4.929l1.414-1.414L7.05 5.636 5.636 7.05 3.515 4.93zM16.95 18.364l1.414-1.414 2.121 2.121-1.414 1.414-2.121-2.121zm2.121-14.85l1.414 1.415-2.121 2.121-1.414-1.414 2.121-2.121zM5.636 16.95l1.414 1.414-2.121 2.121-1.414-1.414 2.121-2.121zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></symbol><symbol id="reset-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M18.537 19.567A9.961 9.961 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10c0 2.136-.67 4.116-1.81 5.74L17 12h3a8 8 0 1 0-2.46 5.772l.997 1.795z"/></symbol><symbol id="down-icon" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.7803 6.21967C13.0732 6.51256 13.0732 6.98744 12.7803 7.28033L8.53033 11.5303C8.23744 11.8232 7.76256 11.8232 7.46967 11.5303L3.21967 7.28033C2.92678 6.98744 2.92678 6.51256 3.21967 6.21967C3.51256 5.92678 3.98744 5.92678 4.28033 6.21967L8 9.93934L11.7197 6.21967C12.0126 5.92678 12.4874 5.92678 12.7803 6.21967Z"></path></symbol><symbol id="codepen-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M16.5 13.202L13 15.535v3.596L19.197 15 16.5 13.202zM14.697 12L12 10.202 9.303 12 12 13.798 14.697 12zM20 10.869L18.303 12 20 13.131V10.87zM19.197 9L13 4.869v3.596l3.5 2.333L19.197 9zM7.5 10.798L11 8.465V4.869L4.803 9 7.5 10.798zM4.803 15L11 19.131v-3.596l-3.5-2.333L4.803 15zM4 13.131L5.697 12 4 10.869v2.262zM2 9a1 1 0 0 1 .445-.832l9-6a1 1 0 0 1 1.11 0l9 6A1 1 0 0 1 22 9v6a1 1 0 0 1-.445.832l-9 6a1 1 0 0 1-1.11 0l-9-6A1 1 0 0 1 2 15V9z"/></symbol><symbol id="close-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z"/></symbol><symbol id="menu-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M3 4h18v2H3V4zm0 7h18v2H3v-2zm0 7h18v2H3v-2z"/></symbol></defs></svg></head><body data-theme="dark"><div class="sidebar-container"><div class="sidebar" id="sidebar"><div class="sidebar-items-container"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-kdns_bucket.html">kdns/bucket</a></div><div class="sidebar-section-children"><a href="module-kdns_constants.html">kdns/constants</a></div><div class="sidebar-section-children"><a href="module-kdns_contacts.html">kdns/contacts</a></div><div class="sidebar-section-children"><a href="module-kdns_keys.html">kdns/keys</a></div><div class="sidebar-section-children"><a href="module-kdns_node.html">kdns/node</a></div><div class="sidebar-section-children"><a href="module-kdns_protocol.html">kdns/protocol</a></div><div class="sidebar-section-children"><a href="module-kdns_router.html">kdns/router</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-kdns_bucket-Bucket.html">Bucket</a></div><div class="sidebar-section-children"><a href="module-kdns_contacts-Contact.html">Contact</a></div><div class="sidebar-section-children"><a href="module-kdns_contacts-ContactList.html">ContactList</a></div><div class="sidebar-section-children"><a href="module-kdns_node-Node.html">Node</a></div><div class="sidebar-section-children"><a href="module-kdns_protocol-Protocol.html">Protocol</a></div><div class="sidebar-section-children"><a href="module-kdns_router-Router.html">Router</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-events"><div>Events</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-kdns_node-Node.html#event:message_queued">message_queued</a></div><div class="sidebar-section-children"><a href="module-kdns_node-Node.html#event:storage_delete">storage_delete</a></div><div class="sidebar-section-children"><a href="module-kdns_node-Node.html#event:storage_expire">storage_expire</a></div><div class="sidebar-section-children"><a href="module-kdns_node-Node.html#event:storage_replicate">storage_replicate</a></div><div class="sidebar-section-children"><a href="module-kdns_protocol-Protocol.html#event:storage_get">storage_get</a></div><div class="sidebar-section-children"><a href="module-kdns_protocol-Protocol.html#event:storage_put">storage_put</a></div><div class="sidebar-section-children"><a href="module-kdns_router-Router.html#event:contact_added">contact_added</a></div><div class="sidebar-section-children"><a href="module-kdns_router-Router.html#event:contact_deleted">contact_deleted</a></div></div></div></div></div><div class="navbar-container" id="VuAckcnZhf"><nav class="navbar"><div class="navbar-left-items"></div><div class="navbar-right-items"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#light-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div><nav></nav></nav></div><div class="toc-container"><div class="toc-content"><span class="bold">On this page</span><div id="eed4d2a0bfd64539bb9df78095dec881"></div></div></div><div class="body-wrapper"><div class="main-content"><div class="main-wrapper"><section><header><h1 id="Node-title" class="has-anchor"><span class="ancestors"><a href="module-kdns_node.html">kdns/node</a>~</span> Node</h1></header><article><div class="container-overview"><h3 class="name has-anchor" id="Node"><span class="type-signature"></span>new Node<span class="signature">(contact, options<span class="signature-attributes">opt</span>)</span></h3><div class="description"><p>Kademlia protocol implementation. Creates an interface for orchestrating a Kademlia network and extending it.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>contact</code></td><td class="type"><span class="param-type"><a href="module-kdns_contacts-Contact.html">module:kdns/contacts~Contact</a></span></td><td class="attributes"></td><td class="description last"><p>Address and fingerprint of this node</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type"><a href="module-kdns_node.html#~NodeOptions">module:kdns/node~NodeOptions</a></span></td><td class="attributes"><optional><br></td><td class="description last"><p>Internal overrides</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="node.js.html">node.js</a>, <a href="node.js.html#line147">line 147</a></li></ul></dd></div></dl></div><h2 id="Extends" class="subsection-title has-anchor">Extends</h2><ul><li>EventEmitter</li></ul><h2 id="methods" class="subsection-title has-anchor">Methods</h2><h3 class="name has-anchor" id="expire"><span class="type-signature"></span>expire<span class="signature">()</span><span class="type-signature"> → {undefined}</span></h3><div class="description"><p>Items expire T_EXPIRE seconds after the original publication. All items are assigned an expiration time which is "exponentially inversely proportional to the number of nodes between the current node and the node whose ID is closest to the key", where this number is "inferred from the bucket structure of the current node".</p></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="node.js.html">node.js</a>, <a href="node.js.html#line415">line 415</a></li></ul></dd></div></dl><div class="method-member-container flex w-100 overflow-auto mt-20"><strong>Fires:</strong><ul><li><a href="module-kdns_node-Node.html#event:storage_expire">module:kdns/node~Node#event:storage_expire</a></li></ul></div><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">undefined</span></dd></dl></div><h3 class="name has-anchor" id="iterativeFindNode"><span class="type-signature"></span>iterativeFindNode<span class="signature">(key)</span><span class="type-signature"> → {Promise.<Array.<<a href="module-kdns_contacts-Contact.html">module:kdns/contacts~Contact</a>>>}</span></h3><div class="description"><p>Basic kademlia lookup operation that builds a set of K contacts closest to the given key</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>key</code></td><td class="type"><span class="param-type">buffer</span> |<wbr> <span class="param-type">string</span></td><td class="description last"><p>Reference key for node lookup</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="node.js.html">node.js</a>, <a href="node.js.html#line338">line 338</a></li></ul></dd></div></dl><div class="method-member-container flex w-100 overflow-auto mt-20"><strong>Fires:</strong><ul><li><a href="module-kdns_node-Node.html#event:message_queued">module:kdns/node~Node#event:message_queued</a></li></ul></div><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Promise.<Array.<<a href="module-kdns_contacts-Contact.html">module:kdns/contacts~Contact</a>>></span></dd></dl></div><h3 class="name has-anchor" id="iterativeFindValue"><span class="type-signature"></span>iterativeFindValue<span class="signature">(key)</span><span class="type-signature"> → {Promise.<(Array.<<a href="module-kdns_contacts-Contact.html">module:kdns/contacts~Contact</a>>|<a href="module-kdns_node.html#~StoredItem">module:kdns/node~StoredItem</a>)>}</span></h3><div class="description"><p>Kademlia search operation that is conducted as a node lookup and builds a list of K closest contacts. If at any time during the lookup the value is returned, the search is abandoned. If no value is found, the K closest contacts are returned. Upon success, we must store the value at the nearest node seen during the search that did not return the value.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>key</code></td><td class="type"><span class="param-type">buffer</span> |<wbr> <span class="param-type">string</span></td><td class="description last"><p>Key for value lookup</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="node.js.html">node.js</a>, <a href="node.js.html#line361">line 361</a></li></ul></dd></div></dl><div class="method-member-container flex w-100 overflow-auto mt-20"><strong>Fires:</strong><ul><li><a href="module-kdns_node-Node.html#event:message_queued">module:kdns/node~Node#event:message_queued</a></li></ul></div><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Promise.<(Array.<<a href="module-kdns_contacts-Contact.html">module:kdns/contacts~Contact</a>>|<a href="module-kdns_node.html#~StoredItem">module:kdns/node~StoredItem</a>)></span></dd></dl></div><h3 class="name has-anchor" id="iterativeStore"><span class="type-signature"></span>iterativeStore<span class="signature">(key, value)</span><span class="type-signature"> → {Promise.<number>}</span></h3><div class="description"><p>Performs a lookup to collect K contacts nearest to the given key, sending a STORE message to each of them. Note that if there is a protocol/validation error, you will not receive it as a rejection. Be sure to also check that stored > 0 as part of error handling here.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>key</code></td><td class="type"><span class="param-type">buffer</span> |<wbr> <span class="param-type">string</span></td><td class="description last"><p>Key to store data under</p></td></tr><tr><td class="name"><code>value</code></td><td class="type"><span class="param-type"><a href="module-kdns_node.html#~StoredItem">module:kdns/node~StoredItem</a></span> |<wbr> <span class="param-type">Buffer</span></td><td class="description last"><p>Value to store by key</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="node.js.html">node.js</a>, <a href="node.js.html#line280">line 280</a></li></ul></dd></div></dl><div class="method-member-container flex w-100 overflow-auto mt-20"><strong>Fires:</strong><ul><li><a href="module-kdns_node-Node.html#event:message_queued">module:kdns/node~Node#event:message_queued</a></li></ul></div><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Promise.<number></span></dd></dl></div><h3 class="name has-anchor" id="join"><span class="type-signature"></span>join<span class="signature">(peer)</span><span class="type-signature"> → {Promise.<undefined>}</span></h3><div class="description"><p>Inserts the given contact into the routing table and uses it to perform a Node#iterativeFindNode for this node's identity, then refreshes all buckets further than it's closest neighbor, which will be in the occupied bucket with the lowest index</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>peer</code></td><td class="type"><span class="param-type"><a href="module-kdns_contacts-Contact.html">module:kdns/contacts~Contact</a></span></td><td class="description last"><p>Peer to bootstrap from</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="node.js.html">node.js</a>, <a href="node.js.html#line189">line 189</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Promise.<undefined></span></dd></dl></div><h3 class="name has-anchor" id="ping"><span class="type-signature"></span>ping<span class="signature">(peer)</span><span class="type-signature"> → {Promise.<number>}</span></h3><div class="description"><p>Sends a PING message to the supplied contact, resolves with latency.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>peer</code></td><td class="type"><span class="param-type"><a href="module-kdns_contacts-Contact.html">module:kdns/contacts~Contact</a></span></td><td class="description last"><p>Peer to PING</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="node.js.html">node.js</a>, <a href="node.js.html#line217">line 217</a></li></ul></dd></div></dl><div class="method-member-container flex w-100 overflow-auto mt-20"><strong>Fires:</strong><ul><li><a href="module-kdns_node-Node.html#event:message_queued">module:kdns/node~Node#event:message_queued</a></li></ul></div><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Promise.<number></span></dd></dl></div><h3 class="name has-anchor" id="refresh"><span class="type-signature"></span>refresh<span class="signature">(startIndex)</span><span class="type-signature"> → {Promise.<undefined>}</span></h3><div class="description"><p>If no node lookups have been performed in any given bucket's range for T_REFRESH, the node selects a random number in that range and does a refresh, an iterativeFindNode using that number as key.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>startIndex</code></td><td class="type"><span class="param-type">number</span></td><td class="default">0</td><td class="description last"><p>bucket index to start refresh from</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="node.js.html">node.js</a>, <a href="node.js.html#line449">line 449</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Promise.<undefined></span></dd></dl></div><h3 class="name has-anchor" id="replicate"><span class="type-signature"></span>replicate<span class="signature">()</span><span class="type-signature"> → {undefined}</span></h3><div class="description"><p>Performs a scan of the storage adapter and performs republishing/replication of items stored. Items that we did not publish ourselves get republished every T_REPLICATE. Items we did publish get republished every T_REPUBLISH.</p></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="node.js.html">node.js</a>, <a href="node.js.html#line374">line 374</a></li></ul></dd></div></dl><div class="method-member-container flex w-100 overflow-auto mt-20"><strong>Fires:</strong><ul><li><a href="module-kdns_node-Node.html#event:storage_replicate">module:kdns/node~Node#event:storage_replicate</a></li></ul></div><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">undefined</span></dd></dl></div><h2 id="events" class="subsection-title has-anchor">Events</h2><h3 class="name has-anchor" id="event:message_queued">message_queued</h3><div class="description"><p>RPC message is queued for you to send. This is implementation specific based on how you want to handle networking. This event contains all the data necessary for you to handle transport.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>method</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>RPC method name to call</p></td></tr><tr><td class="name"><code>params</code></td><td class="type"><span class="param-type">array.<(string|object|number|boolean|Stream)></span></td><td class="description last"><p>Arguments to pass the method call</p></td></tr><tr><td class="name"><code>target</code></td><td class="type"><span class="param-type"><a href="module-kdns_contacts-Contact.html">module:kdns/contacts~Contact</a></span></td><td class="description last"><p>Contact address information</p></td></tr><tr><td class="name"><code>respond</code></td><td class="type"><span class="param-type"><a href="module-kdns_protocol.html#~HandlerResponse">module:kdns/protocol~HandlerResponse</a></span></td><td class="description last"><p>Resolves the message response</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="node.js.html">node.js</a>, <a href="node.js.html#line99">line 99</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="event:storage_delete">storage_delete</h3><div class="description"><p>Indicates that you may delete the item stored by the key. This is triggered most likely by the expiration routine.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>key</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>Key of storage item to delete</p></td></tr><tr><td class="name"><code>respond</code></td><td class="type"><span class="param-type"><a href="module-kdns_protocol.html#~HandlerResponse">module:kdns/protocol~HandlerResponse</a></span></td><td class="description last"><p>Resolves the delete request</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="node.js.html">node.js</a>, <a href="node.js.html#line110">line 110</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="event:storage_expire">storage_expire</h3><div class="description"><p>Expiration routine has started. A writable stream is provided. Only items requiring expiration will be requested for deletion.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>expirator</code></td><td class="type"><span class="param-type"><a href="module-kdns_node.html#~ExpirationStream">module:kdns/node~ExpirationStream</a></span></td><td class="description last"><p>Reads from a <a href="module-kdns_node.html#~ReadableStore">module:kdns/node~ReadableStore</a></p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="node.js.html">node.js</a>, <a href="node.js.html#line125">line 125</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="event:storage_replicate">storage_replicate</h3><div class="description"><p>Replication routine has started. A writable stream is provided. Only items requiring replication will be replicated.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>replicator</code></td><td class="type"><span class="param-type"><a href="module-kdns_node.html#~ReplicatorStream">module:kdns/node~ReplicatorStream</a></span></td><td class="description last"><p>Reads from a <a href="module-kdns_node.html#~ReadableStore">module:kdns/node~ReadableStore</a></p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="node.js.html">node.js</a>, <a href="node.js.html#line118">line 118</a></li></ul></dd></div></dl></article></section></div></div></div><div class="search-container" id="PkfLWpAbet" style="display:none"><div class="wrapper" id="iCxFxjkHbP"><button class="icon-button search-close-button" id="VjLlGakifb" aria-label="close search"><svg><use xlink:href="#close-icon"></use></svg></button><div class="search-box-c"><svg><use xlink:href="#search-icon"></use></svg> <input type="text" id="vpcKVYIppa" class="search-input" placeholder="Search..." autofocus></div><div class="search-result-c" id="fWwVHRuDuN"><span class="search-result-c-text">Type anything to view search result</span></div></div></div><div class="mobile-menu-icon-container"><button class="icon-button" id="mobile-menu" data-isopen="false" aria-label="menu"><svg><use xlink:href="#menu-icon"></use></svg></button></div><div id="mobile-sidebar" class="mobile-sidebar-container"><div class="mobile-sidebar-wrapper"><div class="mobile-nav-links"></div><div class="mobile-sidebar-items-c"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-kdns_bucket.html">kdns/bucket</a></div><div class="sidebar-section-children"><a href="module-kdns_constants.html">kdns/constants</a></div><div class="sidebar-section-children"><a href="module-kdns_contacts.html">kdns/contacts</a></div><div class="sidebar-section-children"><a href="module-kdns_keys.html">kdns/keys</a></div><div class="sidebar-section-children"><a href="module-kdns_node.html">kdns/node</a></div><div class="sidebar-section-children"><a href="module-kdns_protocol.html">kdns/protocol</a></div><div class="sidebar-section-children"><a href="module-kdns_router.html">kdns/router</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-kdns_bucket-Bucket.html">Bucket</a></div><div class="sidebar-section-children"><a href="module-kdns_contacts-Contact.html">Contact</a></div><div class="sidebar-section-children"><a href="module-kdns_contacts-ContactList.html">ContactList</a></div><div class="sidebar-section-children"><a href="module-kdns_node-Node.html">Node</a></div><div class="sidebar-section-children"><a href="module-kdns_protocol-Protocol.html">Protocol</a></div><div class="sidebar-section-children"><a href="module-kdns_router-Router.html">Router</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-events"><div>Events</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-kdns_node-Node.html#event:message_queued">message_queued</a></div><div class="sidebar-section-children"><a href="module-kdns_node-Node.html#event:storage_delete">storage_delete</a></div><div class="sidebar-section-children"><a href="module-kdns_node-Node.html#event:storage_expire">storage_expire</a></div><div class="sidebar-section-children"><a href="module-kdns_node-Node.html#event:storage_replicate">storage_replicate</a></div><div class="sidebar-section-children"><a href="module-kdns_protocol-Protocol.html#event:storage_get">storage_get</a></div><div class="sidebar-section-children"><a href="module-kdns_protocol-Protocol.html#event:storage_put">storage_put</a></div><div class="sidebar-section-children"><a href="module-kdns_router-Router.html#event:contact_added">contact_added</a></div><div class="sidebar-section-children"><a href="module-kdns_router-Router.html#event:contact_deleted">contact_deleted</a></div></div></div><div class="mobile-navbar-actions"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#light-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div></div></div><script type="text/javascript" src="scripts/core.min.js"></script><script src="scripts/search.min.js" defer="defer"></script><script src="scripts/third-party/fuse.js" defer="defer"></script><script type="text/javascript">var tocbotInstance=tocbot.init({tocSelector:"#eed4d2a0bfd64539bb9df78095dec881",contentSelector:".main-content",headingSelector:"h1, h2, h3",hasInnerContainers:!0,scrollContainer:".main-content",headingsOffset:130,onClick:bringLinkToView})</script></body></html>