2020-08-25 16:48:04 +02:00
|
|
|
'use strict'
|
|
|
|
|
2021-04-15 09:40:02 +02:00
|
|
|
// Pubsub adapter to keep API with handlers while not removed.
|
2020-12-10 14:48:14 +01:00
|
|
|
/**
|
|
|
|
* @typedef {import('libp2p-interfaces/src/pubsub').InMessage} InMessage
|
|
|
|
* @typedef {import('libp2p-interfaces/src/pubsub')} PubsubRouter
|
|
|
|
*/
|
|
|
|
|
2021-04-15 09:40:02 +02:00
|
|
|
/**
|
2021-04-21 13:55:21 +01:00
|
|
|
* @param {{new(...args: any[]): PubsubRouter}} PubsubRouter
|
2021-04-15 09:40:02 +02:00
|
|
|
* @param {import('.')} libp2p
|
|
|
|
* @param {{ enabled: boolean; } & import(".").PubsubLocalOptions & import("libp2p-interfaces/src/pubsub").PubsubOptions} options
|
|
|
|
*/
|
2020-12-10 14:48:14 +01:00
|
|
|
function pubsubAdapter (PubsubRouter, libp2p, options) {
|
2021-04-21 13:55:21 +01:00
|
|
|
/** @type {PubsubRouter & { _subscribeAdapter: PubsubRouter['subscribe'], _unsubscribeAdapter: PubsubRouter['unsubscribe'] }} */
|
|
|
|
// @ts-ignore we set the extra _subscribeAdapter and _unsubscribeAdapter properties afterwards
|
2020-12-10 14:48:14 +01:00
|
|
|
const pubsub = new PubsubRouter(libp2p, options)
|
|
|
|
pubsub._subscribeAdapter = pubsub.subscribe
|
|
|
|
pubsub._unsubscribeAdapter = pubsub.unsubscribe
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Subscribes to a given topic.
|
|
|
|
*
|
|
|
|
* @override
|
|
|
|
* @param {string} topic
|
|
|
|
* @param {(msg: InMessage) => void} [handler]
|
|
|
|
* @returns {void}
|
|
|
|
*/
|
|
|
|
function subscribe (topic, handler) {
|
|
|
|
// Bind provided handler
|
|
|
|
handler && pubsub.on(topic, handler)
|
|
|
|
pubsub._subscribeAdapter(topic)
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Unsubscribe from the given topic.
|
|
|
|
*
|
|
|
|
* @override
|
|
|
|
* @param {string} topic
|
|
|
|
* @param {(msg: InMessage) => void} [handler]
|
|
|
|
* @returns {void}
|
|
|
|
*/
|
|
|
|
function unsubscribe (topic, handler) {
|
|
|
|
if (!handler) {
|
|
|
|
pubsub.removeAllListeners(topic)
|
|
|
|
} else {
|
|
|
|
pubsub.removeListener(topic, handler)
|
2020-08-25 16:48:04 +02:00
|
|
|
}
|
|
|
|
|
2020-12-10 14:48:14 +01:00
|
|
|
if (pubsub.listenerCount(topic) === 0) {
|
|
|
|
pubsub._unsubscribeAdapter(topic)
|
2020-08-25 16:48:04 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-12-10 14:48:14 +01:00
|
|
|
pubsub.subscribe = subscribe
|
|
|
|
pubsub.unsubscribe = unsubscribe
|
|
|
|
|
|
|
|
return pubsub
|
2020-08-25 16:48:04 +02:00
|
|
|
}
|
2020-12-10 14:48:14 +01:00
|
|
|
|
|
|
|
module.exports = pubsubAdapter
|