- LAN discovery for bootstraping
- Plain and encrypted channels (DH key exchange)
- NAT Traveral: UPnP
- Nodes should perform a handshake, where they confirm versions and capabilities, and then optionally upgrade to an encrypted channel using a DH key exchange
- Node IDs should be public keys, and each node should maintain a keychain for signing messages
- Non-overlapping calls
- Use minimum/maximum period between calls
- bind random port when 0
- fixPrecessor removal using pure notify
- successor and predecessor up/down events
- linear route generator using successor list
- lg route generator using finger table and successor list
- fix await in loop of fixSuccessor
- handle IP address change
- successor list replication
- updates on replicas upon set event
- partitioning upon fully joined event
- double check partitioning bounds logic
- use some type of data store for hash table contents
- JSDoc
- ESlint
- comments
- unit tests
- documentation
- RPC protocol review
- define and use status codes
- Remove get-port dependency in lib files
- Remove IP dependency in lib files
- there might be a bug in the lookup server side procedure that throws invalid successor state error
- Bug fix: incorrect FINGER_BASE initialization
- Bug fix: partition before set and set before notify
- Bug fix: invalid partitioning due to improper use of isBetween
- known edge case of isBetween utility since it's made for identifier circle range checking
- consider defining utility methods for other special identifier circle range check
- added isStrictlyBetween utility for the partition method (moveKeys in some literature)
- Memory leak: internal type
- Unhandled promise rejection when node fails
- artifact of temporary lookup procedure throwing when immediate successor is unavailable