autobase-discovery
Version:
Automatic service discovery with self-registering services, using autobase
39 lines (30 loc) • 1.11 kB
JavaScript
const cenc = require('compact-encoding')
const IdEnc = require('hypercore-id-encoding')
const ProtomuxRpcClient = require('protomux-rpc-client')
const ReadyResource = require('ready-resource')
const { resolveStruct } = require('../spec/hyperschema')
const HyperDHT = require('hyperdht')
const PutServiceRequest = resolveStruct('@autodiscovery/put-service-request')
class RpcDiscoveryRegisterClient extends ReadyResource {
constructor(serverKey, dht, accessSeed) {
super()
this.keyPair = HyperDHT.keyPair(IdEnc.decode(accessSeed))
this.rpcClient = new ProtomuxRpcClient(dht, { keyPair: this.keyPair })
this.serverKey = IdEnc.decode(serverKey)
}
async _open() {}
async _close() {
await this.rpcClient.close()
}
async putService(publicKey, service) {
if (!this.opened) await this.ready()
publicKey = IdEnc.decode(publicKey)
await this.rpcClient.makeRequest(
this.serverKey,
'put-service',
{ publicKey, service },
{ requestEncoding: PutServiceRequest, responseEncoding: cenc.none }
)
}
}
module.exports = RpcDiscoveryRegisterClient