88 lines
2.4 KiB
JavaScript
88 lines
2.4 KiB
JavaScript
import WisdomRpcQuery from "./query/wisdom.js";
|
|
// @ts-ignore
|
|
import DHT from "@hyperswarm/dht";
|
|
import StreamingRpcQuery from "./query/streaming.js";
|
|
import SimpleRpcQuery from "./query/simple.js";
|
|
export default class RpcNetwork {
|
|
constructor(dht = new DHT()) {
|
|
this._dht = dht;
|
|
}
|
|
_dht;
|
|
get dht() {
|
|
return this._dht;
|
|
}
|
|
_majorityThreshold = 0.75;
|
|
get majorityThreshold() {
|
|
return this._majorityThreshold;
|
|
}
|
|
set majorityThreshold(value) {
|
|
this._majorityThreshold = value;
|
|
}
|
|
_queryTimeout = 30;
|
|
get queryTimeout() {
|
|
return this._queryTimeout;
|
|
}
|
|
set queryTimeout(value) {
|
|
this._queryTimeout = value;
|
|
}
|
|
_relayTimeout = 2;
|
|
get relayTimeout() {
|
|
return this._relayTimeout;
|
|
}
|
|
set relayTimeout(value) {
|
|
this._relayTimeout = value;
|
|
}
|
|
_relays = [];
|
|
get relays() {
|
|
return this._relays;
|
|
}
|
|
_ready;
|
|
get ready() {
|
|
if (!this._ready) {
|
|
this._ready = this._dht.ready();
|
|
}
|
|
return this._ready;
|
|
}
|
|
_bypassCache = false;
|
|
get bypassCache() {
|
|
return this._bypassCache;
|
|
}
|
|
set bypassCache(value) {
|
|
this._bypassCache = value;
|
|
}
|
|
addRelay(pubkey) {
|
|
this._relays.push(pubkey);
|
|
this._relays = [...new Set(this._relays)];
|
|
}
|
|
removeRelay(pubkey) {
|
|
if (!this._relays.includes(pubkey)) {
|
|
return false;
|
|
}
|
|
delete this._relays[this._relays.indexOf(pubkey)];
|
|
this._relays = Object.values(this._relays);
|
|
return true;
|
|
}
|
|
clearRelays() {
|
|
this._relays = [];
|
|
}
|
|
wisdomQuery(method, module, data = {}, bypassCache = false, options = {}) {
|
|
return new WisdomRpcQuery(this, {
|
|
method,
|
|
module,
|
|
data,
|
|
bypassCache: bypassCache || this._bypassCache,
|
|
}, options).run();
|
|
}
|
|
streamingQuery(relay, method, module, streamHandler, data = {}, options = {}) {
|
|
return new StreamingRpcQuery(this, relay, { method, module, data }, { streamHandler, ...options }).run();
|
|
}
|
|
simpleQuery(relay, method, module, data = {}, bypassCache = false, options = {}) {
|
|
return new SimpleRpcQuery(this, relay, {
|
|
method,
|
|
module,
|
|
data,
|
|
bypassCache: bypassCache || this._bypassCache,
|
|
}, options).run();
|
|
}
|
|
}
|