///
import EventEmitter from "node:events";
import { Types } from "../types";
/** @module DHT */
declare class DHT extends EventEmitter {
permissions: {
dhtBootstrap: number;
dhtAnnounce: number;
dhtLookup: number;
};
peers: Types.Connection.Socket[];
/**
*
*/
constructor();
/**
*
* @param {Array} peers array of active connections
*/
setPeers(peers: Types.Connection.Socket[]): void;
/**
*
* @param type dhtAnnounce, dhtBootstrap, dhtLookup
* @param level 0, 1, 2, 3
*/
setPermission(type: Types.DHT.Type, level: 0 | 1 | 2 | 3): void;
/**
* Sends announce to all online connections
* @param {Number} port
*/
announce(port: number): void;
/**
* Sends DHT lookup request to all online connections
* @param user_id user's hash
* @param node_id [optional] node hash
*/
lookup(user_id: Types.User.Id, node_id?: Types.Node.Id): void;
revoke(): void;
/**
* Requests router
* @param {Object} params
* @param {Object} params.request
* @param {String} params.request.type announce,revoke,lookup
* @param {String} params.request.action get, set
* @param {Number} params.request.port node's public port
* @param {String} params.request.user_id optional (only for lookup)
* @param {String} params.request.node_id optional (only for lookup)
* @param {Object} params.from determined by own node
* @param {String} params.from.user_id user hash
* @param {String} params.from.node_id node hash
* @param {String} params.from.public_ipv4 host
* @param {Object} socket [optional] for a feedback
*/
handleRequest(params: Types.DHT.Card, socket: Types.Connection.Socket): Promise;
/**
* Controller
* @private
* @param {Object} params
* @param {Object} params.from
* @param {Object} params.request
* @returns {Promise}
*/
_handleAnnounce({ from, request, }: {
from: Types.DHT.FromData;
request: Types.DHT.RequestData.Announce;
}): Promise;
/**
* Controller
* @private
* @param {Object} params
* @param {Object} params.from
* @param {Object} params.request
* @param {String} params.request.user_id
* @param {String} params.request.node_id optional
* @returns {Promise}
*/
_handleLookup({ from, request, }: {
from: Types.DHT.FromData;
request: Types.DHT.RequestData.Lookup;
}): Promise;
/**
* Controller
* @private
* @param {Object} params
* @param {Object} params.from
* @param {Object} params.request
*/
_handleRevoke({ from, request, }: {
from: Types.DHT.FromData;
request: Types.DHT.RequestData.Revoke;
}): void;
/**
* Controller
* @private
* @param {Object} params
* @param {Object} params.from
* @param {Object} params.request
* @param {String} params.request.type
* @param {String} params.request.data
* @returns {Promise}
*/
_handlePeers({ from, request, }: {
from: Types.DHT.FromData;
request: Types.DHT.RequestData.LookupAnswer;
}): void;
/**
* Check access level to DHT requests. Handled level can't be 0
* @param {String} type
* @param {String} user_id
* @returns {Boolean}
* @private
*/
_canUse(type: Types.DHT.Request, user_id: Types.User.Id): boolean | undefined;
/**
* Send request to all nodes
* @private
* @param {String} type announce, lookup, revoke
* @param {Object} data
* @param {Number} data.port [optional] for announce
* @param {String} data.user_id [optional] for lookup
* @param {String} data.node_id [optional] for lookup. only when looking for specific node
*/
_dhtMulticast(type: Types.DHT.Request, data: Types.DHT.RequestData.Outgoing): void;
}
export default DHT;